home *** CD-ROM | disk | FTP | other *** search
/ Oh!X 2000 Spring / Oh!X 2000 Spring Special CD-ROM (Japan) (Part 2).7z / Oh!X 2000 Spring Special CD-ROM (Japan) (Part 2).bin / DXF / include / dinput.h < prev    next >
C/C++ Source or Header  |  1999-09-08  |  95KB  |  2,315 lines

  1. /****************************************************************************
  2.  *
  3.  *  Copyright (C) 1996-1999 Microsoft Corporation.  All Rights Reserved.
  4.  *
  5.  *  File:       dinput.h
  6.  *  Content:    DirectInput include file
  7.  *
  8.  ****************************************************************************/
  9.  
  10. #ifndef __DINPUT_INCLUDED__
  11. #define __DINPUT_INCLUDED__
  12.  
  13. #ifndef DIJ_RINGZERO
  14.  
  15. #ifdef _WIN32
  16. #define COM_NO_WINDOWS_H
  17. #include <objbase.h>
  18. #endif
  19.  
  20. #endif /* DIJ_RINGZERO */
  21.  
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25.  
  26.  
  27.  
  28.  
  29. /*
  30.  *  To build applications for older versions of DirectInput 
  31.  *
  32.  *  #define DIRECTINPUT_VERSION 0x0300
  33.  *  or
  34.  *  #define DIRECTINPUT_VERSION 0x0500
  35.  *
  36.  *  before #include <dinput.h>.  By default, #include <dinput.h>
  37.  *  will produce a DirectX 7-compatible header file.
  38.  *
  39.  */
  40.  
  41. #ifndef DIRECTINPUT_VERSION
  42. #define DIRECTINPUT_VERSION         0x0700
  43. #endif
  44.  
  45. #ifndef DIJ_RINGZERO
  46. /****************************************************************************
  47.  *
  48.  *      Class IDs
  49.  *
  50.  ****************************************************************************/
  51.  
  52. DEFINE_GUID(CLSID_DirectInput,      0x25E609E0,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  53. DEFINE_GUID(CLSID_DirectInputDevice,0x25E609E1,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  54.  
  55. /****************************************************************************
  56.  *
  57.  *      Interfaces
  58.  *
  59.  ****************************************************************************/
  60.  
  61. DEFINE_GUID(IID_IDirectInputA,     0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  62. DEFINE_GUID(IID_IDirectInputW,     0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  63. DEFINE_GUID(IID_IDirectInput2A,    0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  64. DEFINE_GUID(IID_IDirectInput2W,    0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  65. DEFINE_GUID(IID_IDirectInput7A,    0X9A4CB684,0X236D,0X11D3,0X8E,0X9D,0X00,0XC0,0X4F,0X68,0X44,0XAE);
  66. DEFINE_GUID(IID_IDirectInput7W,    0X9A4CB685,0X236D,0X11D3,0X8E,0X9D,0X00,0XC0,0X4F,0X68,0X44,0XAE);
  67. DEFINE_GUID(IID_IDirectInputDeviceA, 0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  68. DEFINE_GUID(IID_IDirectInputDeviceW, 0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  69. DEFINE_GUID(IID_IDirectInputDevice2A,0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  70. DEFINE_GUID(IID_IDirectInputDevice2W,0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  71.  
  72. DEFINE_GUID(IID_IDirectInputEffect,  0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  73.  
  74. DEFINE_GUID(IID_IDirectInputDevice7A,0X57D7C6BC,0X2356,0X11D3,0X8E,0X9D,0X00,0XC0,0X4F,0X68,0X44,0XAE);
  75. DEFINE_GUID(IID_IDirectInputDevice7W,0X57D7C6BD,0X2356,0X11D3,0X8E,0X9D,0X00,0XC0,0X4F,0X68,0X44,0XAE);
  76.  
  77. /****************************************************************************
  78.  *
  79.  *      Predefined object types
  80.  *
  81.  ****************************************************************************/
  82.  
  83. DEFINE_GUID(GUID_XAxis,   0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  84. DEFINE_GUID(GUID_YAxis,   0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  85. DEFINE_GUID(GUID_ZAxis,   0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  86. DEFINE_GUID(GUID_RxAxis,  0xA36D02F4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  87. DEFINE_GUID(GUID_RyAxis,  0xA36D02F5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  88. DEFINE_GUID(GUID_RzAxis,  0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  89. DEFINE_GUID(GUID_Slider,  0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  90.  
  91. DEFINE_GUID(GUID_Button,  0xA36D02F0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  92. DEFINE_GUID(GUID_Key,     0x55728220,0xD33C,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  93.  
  94. DEFINE_GUID(GUID_POV,     0xA36D02F2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  95.  
  96. DEFINE_GUID(GUID_Unknown, 0xA36D02F3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  97.  
  98. /****************************************************************************
  99.  *
  100.  *      Predefined product GUIDs
  101.  *
  102.  ****************************************************************************/
  103.  
  104. DEFINE_GUID(GUID_SysMouse,   0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  105. DEFINE_GUID(GUID_SysKeyboard,0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  106. DEFINE_GUID(GUID_Joystick   ,0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  107. DEFINE_GUID(GUID_SysMouseEm, 0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  108. DEFINE_GUID(GUID_SysMouseEm2,0x6F1D2B81,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  109. DEFINE_GUID(GUID_SysKeyboardEm, 0x6F1D2B82,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  110. DEFINE_GUID(GUID_SysKeyboardEm2,0x6F1D2B83,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  111.  
  112. /****************************************************************************
  113.  *
  114.  *      Predefined force feedback effects
  115.  *
  116.  ****************************************************************************/
  117.  
  118. DEFINE_GUID(GUID_ConstantForce, 0x13541C20,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  119. DEFINE_GUID(GUID_RampForce,     0x13541C21,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  120. DEFINE_GUID(GUID_Square,        0x13541C22,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  121. DEFINE_GUID(GUID_Sine,          0x13541C23,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  122. DEFINE_GUID(GUID_Triangle,      0x13541C24,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  123. DEFINE_GUID(GUID_SawtoothUp,    0x13541C25,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  124. DEFINE_GUID(GUID_SawtoothDown,  0x13541C26,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  125. DEFINE_GUID(GUID_Spring,        0x13541C27,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  126. DEFINE_GUID(GUID_Damper,        0x13541C28,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  127. DEFINE_GUID(GUID_Inertia,       0x13541C29,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  128. DEFINE_GUID(GUID_Friction,      0x13541C2A,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  129. DEFINE_GUID(GUID_CustomForce,   0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  130.  
  131. #endif /* DIJ_RINGZERO */
  132.  
  133. /****************************************************************************
  134.  *
  135.  *      Interfaces and Structures...
  136.  *
  137.  ****************************************************************************/
  138.  
  139. #if(DIRECTINPUT_VERSION >= 0x0500)
  140.  
  141. /****************************************************************************
  142.  *
  143.  *      IDirectInputEffect
  144.  *
  145.  ****************************************************************************/
  146.  
  147. #define DIEFT_ALL                   0x00000000
  148.  
  149. #define DIEFT_CONSTANTFORCE         0x00000001
  150. #define DIEFT_RAMPFORCE             0x00000002
  151. #define DIEFT_PERIODIC              0x00000003
  152. #define DIEFT_CONDITION             0x00000004
  153. #define DIEFT_CUSTOMFORCE           0x00000005
  154. #define DIEFT_HARDWARE              0x000000FF
  155. #define DIEFT_FFATTACK              0x00000200
  156. #define DIEFT_FFFADE                0x00000400
  157. #define DIEFT_SATURATION            0x00000800
  158. #define DIEFT_POSNEGCOEFFICIENTS    0x00001000
  159. #define DIEFT_POSNEGSATURATION      0x00002000
  160. #define DIEFT_DEADBAND              0x00004000
  161. #define DIEFT_STARTDELAY            0x00008000
  162. #define DIEFT_GETTYPE(n)            LOBYTE(n)
  163.  
  164. #define DI_DEGREES                  100
  165. #define DI_FFNOMINALMAX             10000
  166. #define DI_SECONDS                  1000000
  167.  
  168. typedef struct DICONSTANTFORCE {
  169.     LONG  lMagnitude;
  170. } DICONSTANTFORCE, *LPDICONSTANTFORCE;
  171. typedef const DICONSTANTFORCE *LPCDICONSTANTFORCE;
  172.  
  173. typedef struct DIRAMPFORCE {
  174.     LONG  lStart;
  175.     LONG  lEnd;
  176. } DIRAMPFORCE, *LPDIRAMPFORCE;
  177. typedef const DIRAMPFORCE *LPCDIRAMPFORCE;
  178.  
  179. typedef struct DIPERIODIC {
  180.     DWORD dwMagnitude;
  181.     LONG  lOffset;
  182.     DWORD dwPhase;
  183.     DWORD dwPeriod;
  184. } DIPERIODIC, *LPDIPERIODIC;
  185. typedef const DIPERIODIC *LPCDIPERIODIC;
  186.  
  187. typedef struct DICONDITION {
  188.     LONG  lOffset;
  189.     LONG  lPositiveCoefficient;
  190.     LONG  lNegativeCoefficient;
  191.     DWORD dwPositiveSaturation;
  192.     DWORD dwNegativeSaturation;
  193.     LONG  lDeadBand;
  194. } DICONDITION, *LPDICONDITION;
  195. typedef const DICONDITION *LPCDICONDITION;
  196.  
  197. typedef struct DICUSTOMFORCE {
  198.     DWORD cChannels;
  199.     DWORD dwSamplePeriod;
  200.     DWORD cSamples;
  201.     LPLONG rglForceData;
  202. } DICUSTOMFORCE, *LPDICUSTOMFORCE;
  203. typedef const DICUSTOMFORCE *LPCDICUSTOMFORCE;
  204.  
  205.  
  206. typedef struct DIENVELOPE {
  207.     DWORD dwSize;                   /* sizeof(DIENVELOPE)   */
  208.     DWORD dwAttackLevel;
  209.     DWORD dwAttackTime;             /* Microseconds         */
  210.     DWORD dwFadeLevel;
  211.     DWORD dwFadeTime;               /* Microseconds         */
  212. } DIENVELOPE, *LPDIENVELOPE;
  213. typedef const DIENVELOPE *LPCDIENVELOPE;
  214.  
  215.  
  216. /* This structure is defined for DirectX 5.0 compatibility */
  217. typedef struct DIEFFECT_DX5 {
  218.     DWORD dwSize;                   /* sizeof(DIEFFECT_DX5) */
  219.     DWORD dwFlags;                  /* DIEFF_*              */
  220.     DWORD dwDuration;               /* Microseconds         */
  221.     DWORD dwSamplePeriod;           /* Microseconds         */
  222.     DWORD dwGain;
  223.     DWORD dwTriggerButton;          /* or DIEB_NOTRIGGER    */
  224.     DWORD dwTriggerRepeatInterval;  /* Microseconds         */
  225.     DWORD cAxes;                    /* Number of axes       */
  226.     LPDWORD rgdwAxes;               /* Array of axes        */
  227.     LPLONG rglDirection;            /* Array of directions  */
  228.     LPDIENVELOPE lpEnvelope;        /* Optional             */
  229.     DWORD cbTypeSpecificParams;     /* Size of params       */
  230.     LPVOID lpvTypeSpecificParams;   /* Pointer to params    */
  231. } DIEFFECT_DX5, *LPDIEFFECT_DX5;
  232. typedef const DIEFFECT_DX5 *LPCDIEFFECT_DX5;
  233.  
  234. typedef struct DIEFFECT {
  235.     DWORD dwSize;                   /* sizeof(DIEFFECT)     */
  236.     DWORD dwFlags;                  /* DIEFF_*              */
  237.     DWORD dwDuration;               /* Microseconds         */
  238.     DWORD dwSamplePeriod;           /* Microseconds         */
  239.     DWORD dwGain;
  240.     DWORD dwTriggerButton;          /* or DIEB_NOTRIGGER    */
  241.     DWORD dwTriggerRepeatInterval;  /* Microseconds         */
  242.     DWORD cAxes;                    /* Number of axes       */
  243.     LPDWORD rgdwAxes;               /* Array of axes        */
  244.     LPLONG rglDirection;            /* Array of directions  */
  245.     LPDIENVELOPE lpEnvelope;        /* Optional             */
  246.     DWORD cbTypeSpecificParams;     /* Size of params       */
  247.     LPVOID lpvTypeSpecificParams;   /* Pointer to params    */
  248. #if(DIRECTINPUT_VERSION >= 0x0600)
  249.     DWORD  dwStartDelay;            /* Microseconds         */
  250. #endif /* DIRECTINPUT_VERSION >= 0x0600 */
  251. } DIEFFECT, *LPDIEFFECT;
  252. typedef DIEFFECT DIEFFECT_DX6;
  253. typedef LPDIEFFECT LPDIEFFECT_DX6;
  254. typedef const DIEFFECT *LPCDIEFFECT;
  255.  
  256.  
  257. #if(DIRECTINPUT_VERSION >= 0x0700)
  258. #ifndef DIJ_RINGZERO
  259. typedef struct DIFILEEFFECT{
  260.     DWORD       dwSize;
  261.     GUID        GuidEffect;
  262.     LPCDIEFFECT lpDiEffect;
  263.     CHAR        szFriendlyName[MAX_PATH];                    
  264. }DIFILEEFFECT, *LPDIFILEEFFECT;                                            
  265. typedef const DIFILEEFFECT *LPCDIFILEEFFECT;                                            
  266. typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , LPVOID); 
  267. #endif /* DIJ_RINGZERO */
  268. #endif /* DIRECTINPUT_VERSION >= 0x0700 */
  269.  
  270. #define DIEFF_OBJECTIDS             0x00000001
  271. #define DIEFF_OBJECTOFFSETS         0x00000002
  272. #define DIEFF_CARTESIAN             0x00000010
  273. #define DIEFF_POLAR                 0x00000020
  274. #define DIEFF_SPHERICAL             0x00000040
  275.  
  276. #define DIEP_DURATION               0x00000001
  277. #define DIEP_SAMPLEPERIOD           0x00000002
  278. #define DIEP_GAIN                   0x00000004
  279. #define DIEP_TRIGGERBUTTON          0x00000008
  280. #define DIEP_TRIGGERREPEATINTERVAL  0x00000010
  281. #define DIEP_AXES                   0x00000020
  282. #define DIEP_DIRECTION              0x00000040
  283. #define DIEP_ENVELOPE               0x00000080
  284. #define DIEP_TYPESPECIFICPARAMS     0x00000100
  285. #if(DIRECTINPUT_VERSION >= 0x0600)
  286. #define DIEP_STARTDELAY             0x00000200
  287. #define DIEP_ALLPARAMS_DX5          0x000001FF
  288. #define DIEP_ALLPARAMS              0x000003FF
  289. #else /* DIRECTINPUT_VERSION < 0x0600 */
  290. #define DIEP_ALLPARAMS              0x000001FF
  291. #endif /* DIRECTINPUT_VERSION < 0x0600 */
  292. #define DIEP_START                  0x20000000
  293. #define DIEP_NORESTART              0x40000000
  294. #define DIEP_NODOWNLOAD             0x80000000
  295. #define DIEB_NOTRIGGER              0xFFFFFFFF
  296.  
  297. #define DIES_SOLO                   0x00000001
  298. #define DIES_NODOWNLOAD             0x80000000
  299.  
  300. #define DIEGES_PLAYING              0x00000001
  301. #define DIEGES_EMULATED             0x00000002
  302.  
  303. typedef struct DIEFFESCAPE {
  304.     DWORD   dwSize;
  305.     DWORD   dwCommand;
  306.     LPVOID  lpvInBuffer;
  307.     DWORD   cbInBuffer;
  308.     LPVOID  lpvOutBuffer;
  309.     DWORD   cbOutBuffer;
  310. } DIEFFESCAPE, *LPDIEFFESCAPE;
  311.  
  312. #ifndef DIJ_RINGZERO
  313.  
  314. #undef INTERFACE
  315. #define INTERFACE IDirectInputEffect
  316.  
  317. DECLARE_INTERFACE_(IDirectInputEffect, IUnknown)
  318. {
  319.     /*** IUnknown methods ***/
  320.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  321.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  322.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  323.  
  324.     /*** IDirectInputEffect methods ***/
  325.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  326.     STDMETHOD(GetEffectGuid)(THIS_ LPGUID) PURE;
  327.     STDMETHOD(GetParameters)(THIS_ LPDIEFFECT,DWORD) PURE;
  328.     STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT,DWORD) PURE;
  329.     STDMETHOD(Start)(THIS_ DWORD,DWORD) PURE;
  330.     STDMETHOD(Stop)(THIS) PURE;
  331.     STDMETHOD(GetEffectStatus)(THIS_ LPDWORD) PURE;
  332.     STDMETHOD(Download)(THIS) PURE;
  333.     STDMETHOD(Unload)(THIS) PURE;
  334.     STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
  335. };
  336.  
  337. typedef struct IDirectInputEffect *LPDIRECTINPUTEFFECT;
  338.  
  339. #if !defined(__cplusplus) || defined(CINTERFACE)
  340. #define IDirectInputEffect_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  341. #define IDirectInputEffect_AddRef(p) (p)->lpVtbl->AddRef(p)
  342. #define IDirectInputEffect_Release(p) (p)->lpVtbl->Release(p)
  343. #define IDirectInputEffect_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
  344. #define IDirectInputEffect_GetEffectGuid(p,a) (p)->lpVtbl->GetEffectGuid(p,a)
  345. #define IDirectInputEffect_GetParameters(p,a,b) (p)->lpVtbl->GetParameters(p,a,b)
  346. #define IDirectInputEffect_SetParameters(p,a,b) (p)->lpVtbl->SetParameters(p,a,b)
  347. #define IDirectInputEffect_Start(p,a,b) (p)->lpVtbl->Start(p,a,b)
  348. #define IDirectInputEffect_Stop(p) (p)->lpVtbl->Stop(p)
  349. #define IDirectInputEffect_GetEffectStatus(p,a) (p)->lpVtbl->GetEffectStatus(p,a)
  350. #define IDirectInputEffect_Download(p) (p)->lpVtbl->Download(p)
  351. #define IDirectInputEffect_Unload(p) (p)->lpVtbl->Unload(p)
  352. #define IDirectInputEffect_Escape(p,a) (p)->lpVtbl->Escape(p,a)
  353. #else
  354. #define IDirectInputEffect_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  355. #define IDirectInputEffect_AddRef(p) (p)->AddRef()
  356. #define IDirectInputEffect_Release(p) (p)->Release()
  357. #define IDirectInputEffect_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
  358. #define IDirectInputEffect_GetEffectGuid(p,a) (p)->GetEffectGuid(a)
  359. #define IDirectInputEffect_GetParameters(p,a,b) (p)->GetParameters(a,b)
  360. #define IDirectInputEffect_SetParameters(p,a,b) (p)->SetParameters(a,b)
  361. #define IDirectInputEffect_Start(p,a,b) (p)->Start(a,b)
  362. #define IDirectInputEffect_Stop(p) (p)->Stop()
  363. #define IDirectInputEffect_GetEffectStatus(p,a) (p)->GetEffectStatus(a)
  364. #define IDirectInputEffect_Download(p) (p)->Download()
  365. #define IDirectInputEffect_Unload(p) (p)->Unload()
  366. #define IDirectInputEffect_Escape(p,a) (p)->Escape(a)
  367. #endif
  368.  
  369. #endif /* DIJ_RINGZERO */
  370.  
  371. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  372.  
  373. /****************************************************************************
  374.  *
  375.  *      IDirectInputDevice
  376.  *
  377.  ****************************************************************************/
  378.  
  379. #define DIDEVTYPE_DEVICE    1
  380. #define DIDEVTYPE_MOUSE     2
  381. #define DIDEVTYPE_KEYBOARD  3
  382. #define DIDEVTYPE_JOYSTICK  4
  383. #define DIDEVTYPE_HID       0x00010000
  384.  
  385. #define DIDEVTYPEMOUSE_UNKNOWN          1
  386. #define DIDEVTYPEMOUSE_TRADITIONAL      2
  387. #define DIDEVTYPEMOUSE_FINGERSTICK      3
  388. #define DIDEVTYPEMOUSE_TOUCHPAD         4
  389. #define DIDEVTYPEMOUSE_TRACKBALL        5
  390.  
  391. #define DIDEVTYPEKEYBOARD_UNKNOWN       0
  392. #define DIDEVTYPEKEYBOARD_PCXT          1
  393. #define DIDEVTYPEKEYBOARD_OLIVETTI      2
  394. #define DIDEVTYPEKEYBOARD_PCAT          3
  395. #define DIDEVTYPEKEYBOARD_PCENH         4
  396. #define DIDEVTYPEKEYBOARD_NOKIA1050     5
  397. #define DIDEVTYPEKEYBOARD_NOKIA9140     6
  398. #define DIDEVTYPEKEYBOARD_NEC98         7
  399. #define DIDEVTYPEKEYBOARD_NEC98LAPTOP   8
  400. #define DIDEVTYPEKEYBOARD_NEC98106      9
  401. #define DIDEVTYPEKEYBOARD_JAPAN106     10
  402. #define DIDEVTYPEKEYBOARD_JAPANAX      11
  403. #define DIDEVTYPEKEYBOARD_J3100        12
  404.  
  405. #define DIDEVTYPEJOYSTICK_UNKNOWN       1
  406. #define DIDEVTYPEJOYSTICK_TRADITIONAL   2
  407. #define DIDEVTYPEJOYSTICK_FLIGHTSTICK   3
  408. #define DIDEVTYPEJOYSTICK_GAMEPAD       4
  409. #define DIDEVTYPEJOYSTICK_RUDDER        5
  410. #define DIDEVTYPEJOYSTICK_WHEEL         6
  411. #define DIDEVTYPEJOYSTICK_HEADTRACKER   7
  412.  
  413. #define GET_DIDEVICE_TYPE(dwDevType)    LOBYTE(dwDevType)
  414. #define GET_DIDEVICE_SUBTYPE(dwDevType) HIBYTE(dwDevType)
  415.  
  416. #if(DIRECTINPUT_VERSION >= 0x0500)
  417. /* This structure is defined for DirectX 3.0 compatibility */
  418. typedef struct DIDEVCAPS_DX3 {
  419.     DWORD   dwSize;
  420.     DWORD   dwFlags;
  421.     DWORD   dwDevType;
  422.     DWORD   dwAxes;
  423.     DWORD   dwButtons;
  424.     DWORD   dwPOVs;
  425. } DIDEVCAPS_DX3, *LPDIDEVCAPS_DX3;
  426. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  427.  
  428. typedef struct DIDEVCAPS {
  429.     DWORD   dwSize;
  430.     DWORD   dwFlags;
  431.     DWORD   dwDevType;
  432.     DWORD   dwAxes;
  433.     DWORD   dwButtons;
  434.     DWORD   dwPOVs;
  435. #if(DIRECTINPUT_VERSION >= 0x0500)
  436.     DWORD   dwFFSamplePeriod;
  437.     DWORD   dwFFMinTimeResolution;
  438.     DWORD   dwFirmwareRevision;
  439.     DWORD   dwHardwareRevision;
  440.     DWORD   dwFFDriverVersion;
  441. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  442. } DIDEVCAPS, *LPDIDEVCAPS;
  443.  
  444. #define DIDC_ATTACHED           0x00000001
  445. #define DIDC_POLLEDDEVICE       0x00000002
  446. #define DIDC_EMULATED           0x00000004
  447. #define DIDC_POLLEDDATAFORMAT   0x00000008
  448. #if(DIRECTINPUT_VERSION >= 0x0500)
  449. #define DIDC_FORCEFEEDBACK      0x00000100
  450. #define DIDC_FFATTACK           0x00000200
  451. #define DIDC_FFFADE             0x00000400
  452. #define DIDC_SATURATION         0x00000800
  453. #define DIDC_POSNEGCOEFFICIENTS 0x00001000
  454. #define DIDC_POSNEGSATURATION   0x00002000
  455. #define DIDC_DEADBAND           0x00004000
  456. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  457. #define DIDC_STARTDELAY         0x00008000
  458. #if(DIRECTINPUT_VERSION >= 0x050a)
  459. #define DIDC_ALIAS              0x00010000
  460. #define DIDC_PHANTOM            0x00020000
  461. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  462.  
  463. #define DIDFT_ALL           0x00000000
  464.  
  465. #define DIDFT_RELAXIS       0x00000001
  466. #define DIDFT_ABSAXIS       0x00000002
  467. #define DIDFT_AXIS          0x00000003
  468.  
  469. #define DIDFT_PSHBUTTON     0x00000004
  470. #define DIDFT_TGLBUTTON     0x00000008
  471. #define DIDFT_BUTTON        0x0000000C
  472.  
  473. #define DIDFT_POV           0x00000010
  474. #define DIDFT_COLLECTION    0x00000040
  475. #define DIDFT_NODATA        0x00000080
  476.  
  477. #define DIDFT_ANYINSTANCE   0x00FFFF00
  478. #define DIDFT_INSTANCEMASK  DIDFT_ANYINSTANCE
  479. #define DIDFT_MAKEINSTANCE(n) ((WORD)(n) << 8)
  480. #define DIDFT_GETTYPE(n)     LOBYTE(n)
  481. #define DIDFT_GETINSTANCE(n) LOWORD((n) >> 8)
  482. #define DIDFT_FFACTUATOR        0x01000000
  483. #define DIDFT_FFEFFECTTRIGGER   0x02000000
  484. #if(DIRECTINPUT_VERSION >= 0x050a)
  485. #define DIDFT_OUTPUT            0x10000000
  486. #define DIDFT_VENDORDEFINED     0x04000000
  487. #define DIDFT_ALIAS             0x08000000
  488. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  489.  
  490. #define DIDFT_ENUMCOLLECTION(n) ((WORD)(n) << 8)
  491. #define DIDFT_NOCOLLECTION      0x00FFFF00
  492.  
  493. #ifndef DIJ_RINGZERO
  494.  
  495. typedef struct _DIOBJECTDATAFORMAT {
  496.     const GUID *pguid;
  497.     DWORD   dwOfs;
  498.     DWORD   dwType;
  499.     DWORD   dwFlags;
  500. } DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT;
  501. typedef const DIOBJECTDATAFORMAT *LPCDIOBJECTDATAFORMAT;
  502.  
  503. typedef struct _DIDATAFORMAT {
  504.     DWORD   dwSize;
  505.     DWORD   dwObjSize;
  506.     DWORD   dwFlags;
  507.     DWORD   dwDataSize;
  508.     DWORD   dwNumObjs;
  509.     LPDIOBJECTDATAFORMAT rgodf;
  510. } DIDATAFORMAT, *LPDIDATAFORMAT;
  511. typedef const DIDATAFORMAT *LPCDIDATAFORMAT;
  512.  
  513. #define DIDF_ABSAXIS            0x00000001
  514. #define DIDF_RELAXIS            0x00000002
  515.  
  516. #ifdef __cplusplus
  517. extern "C" {
  518. #endif
  519. extern const DIDATAFORMAT c_dfDIMouse;
  520.  
  521. #if(DIRECTINPUT_VERSION >= 0x0700)
  522. extern const DIDATAFORMAT c_dfDIMouse2;
  523. #endif /* DIRECTINPUT_VERSION >= 0x0700 */
  524.  
  525. extern const DIDATAFORMAT c_dfDIKeyboard;
  526.  
  527. #if(DIRECTINPUT_VERSION >= 0x0500)
  528. extern const DIDATAFORMAT c_dfDIJoystick;
  529. extern const DIDATAFORMAT c_dfDIJoystick2;
  530. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  531.  
  532. #ifdef __cplusplus
  533. };
  534. #endif
  535.  
  536. #if(DIRECTINPUT_VERSION >= 0x0500)
  537. /* These structures are defined for DirectX 3.0 compatibility */
  538.  
  539. typedef struct DIDEVICEOBJECTINSTANCE_DX3A {
  540.     DWORD   dwSize;
  541.     GUID    guidType;
  542.     DWORD   dwOfs;
  543.     DWORD   dwType;
  544.     DWORD   dwFlags;
  545.     CHAR    tszName[MAX_PATH];
  546. } DIDEVICEOBJECTINSTANCE_DX3A, *LPDIDEVICEOBJECTINSTANCE_DX3A;
  547. typedef struct DIDEVICEOBJECTINSTANCE_DX3W {
  548.     DWORD   dwSize;
  549.     GUID    guidType;
  550.     DWORD   dwOfs;
  551.     DWORD   dwType;
  552.     DWORD   dwFlags;
  553.     WCHAR   tszName[MAX_PATH];
  554. } DIDEVICEOBJECTINSTANCE_DX3W, *LPDIDEVICEOBJECTINSTANCE_DX3W;
  555. #ifdef UNICODE
  556. typedef DIDEVICEOBJECTINSTANCE_DX3W DIDEVICEOBJECTINSTANCE_DX3;
  557. typedef LPDIDEVICEOBJECTINSTANCE_DX3W LPDIDEVICEOBJECTINSTANCE_DX3;
  558. #else
  559. typedef DIDEVICEOBJECTINSTANCE_DX3A DIDEVICEOBJECTINSTANCE_DX3;
  560. typedef LPDIDEVICEOBJECTINSTANCE_DX3A LPDIDEVICEOBJECTINSTANCE_DX3;
  561. #endif // UNICODE
  562. typedef const DIDEVICEOBJECTINSTANCE_DX3A *LPCDIDEVICEOBJECTINSTANCE_DX3A;
  563. typedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W;
  564. typedef const DIDEVICEOBJECTINSTANCE_DX3  *LPCDIDEVICEOBJECTINSTANCE_DX3;
  565. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  566.  
  567. typedef struct DIDEVICEOBJECTINSTANCEA {
  568.     DWORD   dwSize;
  569.     GUID    guidType;
  570.     DWORD   dwOfs;
  571.     DWORD   dwType;
  572.     DWORD   dwFlags;
  573.     CHAR    tszName[MAX_PATH];
  574. #if(DIRECTINPUT_VERSION >= 0x0500)
  575.     DWORD   dwFFMaxForce;
  576.     DWORD   dwFFForceResolution;
  577.     WORD    wCollectionNumber;
  578.     WORD    wDesignatorIndex;
  579.     WORD    wUsagePage;
  580.     WORD    wUsage;
  581.     DWORD   dwDimension;
  582.     WORD    wExponent;
  583.     WORD    wReportId;
  584. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  585. } DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA;
  586. typedef struct DIDEVICEOBJECTINSTANCEW {
  587.     DWORD   dwSize;
  588.     GUID    guidType;
  589.     DWORD   dwOfs;
  590.     DWORD   dwType;
  591.     DWORD   dwFlags;
  592.     WCHAR   tszName[MAX_PATH];
  593. #if(DIRECTINPUT_VERSION >= 0x0500)
  594.     DWORD   dwFFMaxForce;
  595.     DWORD   dwFFForceResolution;
  596.     WORD    wCollectionNumber;
  597.     WORD    wDesignatorIndex;
  598.     WORD    wUsagePage;
  599.     WORD    wUsage;
  600.     DWORD   dwDimension;
  601.     WORD    wExponent;
  602.     WORD    wReportId;
  603. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  604. } DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW;
  605. #ifdef UNICODE
  606. typedef DIDEVICEOBJECTINSTANCEW DIDEVICEOBJECTINSTANCE;
  607. typedef LPDIDEVICEOBJECTINSTANCEW LPDIDEVICEOBJECTINSTANCE;
  608. #else
  609. typedef DIDEVICEOBJECTINSTANCEA DIDEVICEOBJECTINSTANCE;
  610. typedef LPDIDEVICEOBJECTINSTANCEA LPDIDEVICEOBJECTINSTANCE;
  611. #endif // UNICODE
  612. typedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA;
  613. typedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW;
  614. typedef const DIDEVICEOBJECTINSTANCE  *LPCDIDEVICEOBJECTINSTANCE;
  615.  
  616. typedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA, LPVOID);
  617. typedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW, LPVOID);
  618. #ifdef UNICODE
  619. #define LPDIENUMDEVICEOBJECTSCALLBACK  LPDIENUMDEVICEOBJECTSCALLBACKW
  620. #else
  621. #define LPDIENUMDEVICEOBJECTSCALLBACK  LPDIENUMDEVICEOBJECTSCALLBACKA
  622. #endif // !UNICODE
  623.  
  624. #if(DIRECTINPUT_VERSION >= 0x0500)
  625. #define DIDOI_FFACTUATOR        0x00000001
  626. #define DIDOI_FFEFFECTTRIGGER   0x00000002
  627. #define DIDOI_POLLED            0x00008000
  628. #define DIDOI_ASPECTPOSITION    0x00000100
  629. #define DIDOI_ASPECTVELOCITY    0x00000200
  630. #define DIDOI_ASPECTACCEL       0x00000300
  631. #define DIDOI_ASPECTFORCE       0x00000400
  632. #define DIDOI_ASPECTMASK        0x00000F00
  633. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  634. #if(DIRECTINPUT_VERSION >= 0x050a)
  635. #define DIDOI_GUIDISUSAGE       0x00010000
  636. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  637.  
  638. typedef struct DIPROPHEADER {
  639.     DWORD   dwSize;
  640.     DWORD   dwHeaderSize;
  641.     DWORD   dwObj;
  642.     DWORD   dwHow;
  643. } DIPROPHEADER, *LPDIPROPHEADER;
  644. typedef const DIPROPHEADER *LPCDIPROPHEADER;
  645.  
  646. #define DIPH_DEVICE             0
  647. #define DIPH_BYOFFSET           1
  648. #define DIPH_BYID               2
  649. #if(DIRECTINPUT_VERSION >= 0x050a)
  650. #define DIPH_BYUSAGE            3
  651.  
  652. #define DIMAKEUSAGEDWORD(UsagePage, Usage) \
  653.                                 (DWORD)MAKELONG(Usage, UsagePage)
  654. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  655.  
  656. typedef struct DIPROPDWORD {
  657.     DIPROPHEADER diph;
  658.     DWORD   dwData;
  659. } DIPROPDWORD, *LPDIPROPDWORD;
  660. typedef const DIPROPDWORD *LPCDIPROPDWORD;
  661.  
  662. typedef struct DIPROPRANGE {
  663.     DIPROPHEADER diph;
  664.     LONG    lMin;
  665.     LONG    lMax;
  666. } DIPROPRANGE, *LPDIPROPRANGE;
  667. typedef const DIPROPRANGE *LPCDIPROPRANGE;
  668.  
  669. #define DIPROPRANGE_NOMIN       ((LONG)0x80000000)
  670. #define DIPROPRANGE_NOMAX       ((LONG)0x7FFFFFFF)
  671.  
  672. #if(DIRECTINPUT_VERSION >= 0x050a)
  673. typedef struct DIPROPCAL {
  674.     DIPROPHEADER diph;
  675.     LONG    lMin;
  676.     LONG    lCenter;
  677.     LONG    lMax;
  678. } DIPROPCAL, *LPDIPROPCAL;
  679. typedef const DIPROPCAL *LPCDIPROPCAL;
  680.  
  681. typedef struct DIPROPGUIDANDPATH {
  682.     DIPROPHEADER diph;
  683.     GUID    guidClass;
  684.     WCHAR   wszPath[MAX_PATH];
  685. } DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH;
  686. typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH;
  687.  
  688. typedef struct DIPROPSTRING {
  689.     DIPROPHEADER diph;
  690.     WCHAR   wsz[MAX_PATH];
  691. } DIPROPSTRING, *LPDIPROPSTRING;
  692. typedef const DIPROPSTRING *LPCDIPROPSTRING;
  693.  
  694. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  695. #ifdef __cplusplus
  696. #define MAKEDIPROP(prop)    (*(const GUID *)(prop))
  697. #else
  698. #define MAKEDIPROP(prop)    ((REFGUID)(prop))
  699. #endif
  700.  
  701. #define DIPROP_BUFFERSIZE       MAKEDIPROP(1)
  702.  
  703. #define DIPROP_AXISMODE         MAKEDIPROP(2)
  704.  
  705. #define DIPROPAXISMODE_ABS      0
  706. #define DIPROPAXISMODE_REL      1
  707.  
  708. #define DIPROP_GRANULARITY      MAKEDIPROP(3)
  709.  
  710. #define DIPROP_RANGE            MAKEDIPROP(4)
  711.  
  712. #define DIPROP_DEADZONE         MAKEDIPROP(5)
  713.  
  714. #define DIPROP_SATURATION       MAKEDIPROP(6)
  715.  
  716. #define DIPROP_FFGAIN           MAKEDIPROP(7)
  717.  
  718. #define DIPROP_FFLOAD           MAKEDIPROP(8)
  719.  
  720. #define DIPROP_AUTOCENTER       MAKEDIPROP(9)
  721.  
  722. #define DIPROPAUTOCENTER_OFF    0
  723. #define DIPROPAUTOCENTER_ON     1
  724.  
  725. #define DIPROP_CALIBRATIONMODE  MAKEDIPROP(10)
  726.  
  727. #define DIPROPCALIBRATIONMODE_COOKED    0
  728. #define DIPROPCALIBRATIONMODE_RAW       1
  729.  
  730. #if(DIRECTINPUT_VERSION >= 0x050a)
  731. #define DIPROP_CALIBRATION      MAKEDIPROP(11)
  732.  
  733. #define DIPROP_GUIDANDPATH      MAKEDIPROP(12)
  734.  
  735. #define DIPROP_INSTANCENAME     MAKEDIPROP(13)
  736.  
  737. #define DIPROP_PRODUCTNAME      MAKEDIPROP(14)
  738. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  739.  
  740. #define DIPROP_JOYSTICKID       MAKEDIPROP(15)
  741.  
  742. #define DIPROP_GETPORTDISPLAYNAME       MAKEDIPROP(16)
  743.  
  744.  
  745. #define DIPROP_ENABLEREPORTID       MAKEDIPROP(17)
  746.  
  747.  
  748. #define DIPROP_GETPHYSICALRANGE            MAKEDIPROP(18)
  749.  
  750. #define DIPROP_GETLOGICALRANGE            MAKEDIPROP(19)
  751.  
  752.  
  753. typedef struct DIDEVICEOBJECTDATA {
  754.     DWORD   dwOfs;
  755.     DWORD   dwData;
  756.     DWORD   dwTimeStamp;
  757.     DWORD   dwSequence;
  758. } DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA;
  759. typedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA;
  760.  
  761. #define DIGDD_PEEK          0x00000001
  762.  
  763. #define DISEQUENCE_COMPARE(dwSequence1, cmp, dwSequence2) \
  764.                         ((int)((dwSequence1) - (dwSequence2)) cmp 0)
  765. #define DISCL_EXCLUSIVE     0x00000001
  766. #define DISCL_NONEXCLUSIVE  0x00000002
  767. #define DISCL_FOREGROUND    0x00000004
  768. #define DISCL_BACKGROUND    0x00000008
  769. #define DISCL_NOWINKEY      0x00000010
  770.  
  771. #if(DIRECTINPUT_VERSION >= 0x0500)
  772. /* These structures are defined for DirectX 3.0 compatibility */
  773.  
  774. typedef struct DIDEVICEINSTANCE_DX3A {
  775.     DWORD   dwSize;
  776.     GUID    guidInstance;
  777.     GUID    guidProduct;
  778.     DWORD   dwDevType;
  779.     CHAR    tszInstanceName[MAX_PATH];
  780.     CHAR    tszProductName[MAX_PATH];
  781. } DIDEVICEINSTANCE_DX3A, *LPDIDEVICEINSTANCE_DX3A;
  782. typedef struct DIDEVICEINSTANCE_DX3W {
  783.     DWORD   dwSize;
  784.     GUID    guidInstance;
  785.     GUID    guidProduct;
  786.     DWORD   dwDevType;
  787.     WCHAR   tszInstanceName[MAX_PATH];
  788.     WCHAR   tszProductName[MAX_PATH];
  789. } DIDEVICEINSTANCE_DX3W, *LPDIDEVICEINSTANCE_DX3W;
  790. #ifdef UNICODE
  791. typedef DIDEVICEINSTANCE_DX3W DIDEVICEINSTANCE_DX3;
  792. typedef LPDIDEVICEINSTANCE_DX3W LPDIDEVICEINSTANCE_DX3;
  793. #else
  794. typedef DIDEVICEINSTANCE_DX3A DIDEVICEINSTANCE_DX3;
  795. typedef LPDIDEVICEINSTANCE_DX3A LPDIDEVICEINSTANCE_DX3;
  796. #endif // UNICODE
  797. typedef const DIDEVICEINSTANCE_DX3A *LPCDIDEVICEINSTANCE_DX3A;
  798. typedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W;
  799. typedef const DIDEVICEINSTANCE_DX3  *LPCDIDEVICEINSTANCE_DX3;
  800. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  801.  
  802. typedef struct DIDEVICEINSTANCEA {
  803.     DWORD   dwSize;
  804.     GUID    guidInstance;
  805.     GUID    guidProduct;
  806.     DWORD   dwDevType;
  807.     CHAR    tszInstanceName[MAX_PATH];
  808.     CHAR    tszProductName[MAX_PATH];
  809. #if(DIRECTINPUT_VERSION >= 0x0500)
  810.     GUID    guidFFDriver;
  811.     WORD    wUsagePage;
  812.     WORD    wUsage;
  813. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  814. } DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA;
  815. typedef struct DIDEVICEINSTANCEW {
  816.     DWORD   dwSize;
  817.     GUID    guidInstance;
  818.     GUID    guidProduct;
  819.     DWORD   dwDevType;
  820.     WCHAR   tszInstanceName[MAX_PATH];
  821.     WCHAR   tszProductName[MAX_PATH];
  822. #if(DIRECTINPUT_VERSION >= 0x0500)
  823.     GUID    guidFFDriver;
  824.     WORD    wUsagePage;
  825.     WORD    wUsage;
  826. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  827. } DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW;
  828. #ifdef UNICODE
  829. typedef DIDEVICEINSTANCEW DIDEVICEINSTANCE;
  830. typedef LPDIDEVICEINSTANCEW LPDIDEVICEINSTANCE;
  831. #else
  832. typedef DIDEVICEINSTANCEA DIDEVICEINSTANCE;
  833. typedef LPDIDEVICEINSTANCEA LPDIDEVICEINSTANCE;
  834. #endif // UNICODE
  835. typedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA;
  836. typedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW;
  837. typedef const DIDEVICEINSTANCE  *LPCDIDEVICEINSTANCE;
  838.  
  839. #undef INTERFACE
  840. #define INTERFACE IDirectInputDeviceW
  841.  
  842. DECLARE_INTERFACE_(IDirectInputDeviceW, IUnknown)
  843. {
  844.     /*** IUnknown methods ***/
  845.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  846.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  847.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  848.  
  849.     /*** IDirectInputDeviceW methods ***/
  850.     STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;
  851.     STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE;
  852.     STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;
  853.     STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;
  854.     STDMETHOD(Acquire)(THIS) PURE;
  855.     STDMETHOD(Unacquire)(THIS) PURE;
  856.     STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;
  857.     STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  858.     STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;
  859.     STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;
  860.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;
  861.     STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE;
  862.     STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE;
  863.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  864.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  865. };
  866.  
  867. typedef struct IDirectInputDeviceW *LPDIRECTINPUTDEVICEW;
  868.  
  869. #undef INTERFACE
  870. #define INTERFACE IDirectInputDeviceA
  871.  
  872. DECLARE_INTERFACE_(IDirectInputDeviceA, IUnknown)
  873. {
  874.     /*** IUnknown methods ***/
  875.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  876.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  877.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  878.  
  879.     /*** IDirectInputDeviceA methods ***/
  880.     STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;
  881.     STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE;
  882.     STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;
  883.     STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;
  884.     STDMETHOD(Acquire)(THIS) PURE;
  885.     STDMETHOD(Unacquire)(THIS) PURE;
  886.     STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;
  887.     STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  888.     STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;
  889.     STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;
  890.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;
  891.     STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE;
  892.     STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE;
  893.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  894.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  895. };
  896.  
  897. typedef struct IDirectInputDeviceA *LPDIRECTINPUTDEVICEA;
  898.  
  899. #ifdef UNICODE
  900. #define IID_IDirectInputDevice IID_IDirectInputDeviceW
  901. #define IDirectInputDevice IDirectInputDeviceW
  902. #define IDirectInputDeviceVtbl IDirectInputDeviceWVtbl
  903. #else
  904. #define IID_IDirectInputDevice IID_IDirectInputDeviceA
  905. #define IDirectInputDevice IDirectInputDeviceA
  906. #define IDirectInputDeviceVtbl IDirectInputDeviceAVtbl
  907. #endif
  908. typedef struct IDirectInputDevice *LPDIRECTINPUTDEVICE;
  909.  
  910. #if !defined(__cplusplus) || defined(CINTERFACE)
  911. #define IDirectInputDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  912. #define IDirectInputDevice_AddRef(p) (p)->lpVtbl->AddRef(p)
  913. #define IDirectInputDevice_Release(p) (p)->lpVtbl->Release(p)
  914. #define IDirectInputDevice_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)
  915. #define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)
  916. #define IDirectInputDevice_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)
  917. #define IDirectInputDevice_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)
  918. #define IDirectInputDevice_Acquire(p) (p)->lpVtbl->Acquire(p)
  919. #define IDirectInputDevice_Unacquire(p) (p)->lpVtbl->Unacquire(p)
  920. #define IDirectInputDevice_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)
  921. #define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
  922. #define IDirectInputDevice_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)
  923. #define IDirectInputDevice_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)
  924. #define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
  925. #define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)
  926. #define IDirectInputDevice_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)
  927. #define IDirectInputDevice_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  928. #define IDirectInputDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
  929. #else
  930. #define IDirectInputDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  931. #define IDirectInputDevice_AddRef(p) (p)->AddRef()
  932. #define IDirectInputDevice_Release(p) (p)->Release()
  933. #define IDirectInputDevice_GetCapabilities(p,a) (p)->GetCapabilities(a)
  934. #define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)
  935. #define IDirectInputDevice_GetProperty(p,a,b) (p)->GetProperty(a,b)
  936. #define IDirectInputDevice_SetProperty(p,a,b) (p)->SetProperty(a,b)
  937. #define IDirectInputDevice_Acquire(p) (p)->Acquire()
  938. #define IDirectInputDevice_Unacquire(p) (p)->Unacquire()
  939. #define IDirectInputDevice_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)
  940. #define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)
  941. #define IDirectInputDevice_SetDataFormat(p,a) (p)->SetDataFormat(a)
  942. #define IDirectInputDevice_SetEventNotification(p,a) (p)->SetEventNotification(a)
  943. #define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
  944. #define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)
  945. #define IDirectInputDevice_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)
  946. #define IDirectInputDevice_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  947. #define IDirectInputDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
  948. #endif
  949.  
  950. #endif /* DIJ_RINGZERO */
  951.  
  952.  
  953. #if(DIRECTINPUT_VERSION >= 0x0500)
  954.  
  955. #define DISFFC_RESET            0x00000001
  956. #define DISFFC_STOPALL          0x00000002
  957. #define DISFFC_PAUSE            0x00000004
  958. #define DISFFC_CONTINUE         0x00000008
  959. #define DISFFC_SETACTUATORSON   0x00000010
  960. #define DISFFC_SETACTUATORSOFF  0x00000020
  961.  
  962. #define DIGFFS_EMPTY            0x00000001
  963. #define DIGFFS_STOPPED          0x00000002
  964. #define DIGFFS_PAUSED           0x00000004
  965. #define DIGFFS_ACTUATORSON      0x00000010
  966. #define DIGFFS_ACTUATORSOFF     0x00000020
  967. #define DIGFFS_POWERON          0x00000040
  968. #define DIGFFS_POWEROFF         0x00000080
  969. #define DIGFFS_SAFETYSWITCHON   0x00000100
  970. #define DIGFFS_SAFETYSWITCHOFF  0x00000200
  971. #define DIGFFS_USERFFSWITCHON   0x00000400
  972. #define DIGFFS_USERFFSWITCHOFF  0x00000800
  973. #define DIGFFS_DEVICELOST       0x80000000
  974.  
  975. #ifndef DIJ_RINGZERO
  976.  
  977. typedef struct DIEFFECTINFOA {
  978.     DWORD   dwSize;
  979.     GUID    guid;
  980.     DWORD   dwEffType;
  981.     DWORD   dwStaticParams;
  982.     DWORD   dwDynamicParams;
  983.     CHAR    tszName[MAX_PATH];
  984. } DIEFFECTINFOA, *LPDIEFFECTINFOA;
  985. typedef struct DIEFFECTINFOW {
  986.     DWORD   dwSize;
  987.     GUID    guid;
  988.     DWORD   dwEffType;
  989.     DWORD   dwStaticParams;
  990.     DWORD   dwDynamicParams;
  991.     WCHAR   tszName[MAX_PATH];
  992. } DIEFFECTINFOW, *LPDIEFFECTINFOW;
  993. #ifdef UNICODE
  994. typedef DIEFFECTINFOW DIEFFECTINFO;
  995. typedef LPDIEFFECTINFOW LPDIEFFECTINFO;
  996. #else
  997. typedef DIEFFECTINFOA DIEFFECTINFO;
  998. typedef LPDIEFFECTINFOA LPDIEFFECTINFO;
  999. #endif // UNICODE
  1000. typedef const DIEFFECTINFOA *LPCDIEFFECTINFOA;
  1001. typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW;
  1002. typedef const DIEFFECTINFO  *LPCDIEFFECTINFO;
  1003.  
  1004. #define DISDD_CONTINUE          0x00000001
  1005.  
  1006. typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID);
  1007. typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID);
  1008. #ifdef UNICODE
  1009. #define LPDIENUMEFFECTSCALLBACK  LPDIENUMEFFECTSCALLBACKW
  1010. #else
  1011. #define LPDIENUMEFFECTSCALLBACK  LPDIENUMEFFECTSCALLBACKA
  1012. #endif // !UNICODE
  1013. typedef BOOL (FAR PASCAL * LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID);
  1014.  
  1015. #undef INTERFACE
  1016. #define INTERFACE IDirectInputDevice2W
  1017.  
  1018. DECLARE_INTERFACE_(IDirectInputDevice2W, IDirectInputDeviceW)
  1019. {
  1020.     /*** IUnknown methods ***/
  1021.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1022.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1023.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1024.  
  1025.     /*** IDirectInputDeviceW methods ***/
  1026.     STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;
  1027.     STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE;
  1028.     STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;
  1029.     STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;
  1030.     STDMETHOD(Acquire)(THIS) PURE;
  1031.     STDMETHOD(Unacquire)(THIS) PURE;
  1032.     STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;
  1033.     STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1034.     STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;
  1035.     STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;
  1036.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;
  1037.     STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE;
  1038.     STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE;
  1039.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1040.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  1041.  
  1042.     /*** IDirectInputDevice2W methods ***/
  1043.     STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;
  1044.     STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE;
  1045.     STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE;
  1046.     STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;
  1047.     STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;
  1048.     STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;
  1049.     STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
  1050.     STDMETHOD(Poll)(THIS) PURE;
  1051.     STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1052. };
  1053.  
  1054. typedef struct IDirectInputDevice2W *LPDIRECTINPUTDEVICE2W;
  1055.  
  1056. #undef INTERFACE
  1057. #define INTERFACE IDirectInputDevice2A
  1058.  
  1059. DECLARE_INTERFACE_(IDirectInputDevice2A, IDirectInputDeviceA)
  1060. {
  1061.     /*** IUnknown methods ***/
  1062.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1063.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1064.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1065.  
  1066.     /*** IDirectInputDeviceA methods ***/
  1067.     STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;
  1068.     STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE;
  1069.     STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;
  1070.     STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;
  1071.     STDMETHOD(Acquire)(THIS) PURE;
  1072.     STDMETHOD(Unacquire)(THIS) PURE;
  1073.     STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;
  1074.     STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1075.     STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;
  1076.     STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;
  1077.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;
  1078.     STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE;
  1079.     STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE;
  1080.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1081.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  1082.  
  1083.     /*** IDirectInputDevice2A methods ***/
  1084.     STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;
  1085.     STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE;
  1086.     STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE;
  1087.     STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;
  1088.     STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;
  1089.     STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;
  1090.     STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
  1091.     STDMETHOD(Poll)(THIS) PURE;
  1092.     STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1093. };
  1094.  
  1095. typedef struct IDirectInputDevice2A *LPDIRECTINPUTDEVICE2A;
  1096.  
  1097. #ifdef UNICODE
  1098. #define IID_IDirectInputDevice2 IID_IDirectInputDevice2W
  1099. #define IDirectInputDevice2 IDirectInputDevice2W
  1100. #define IDirectInputDevice2Vtbl IDirectInputDevice2WVtbl
  1101. #else
  1102. #define IID_IDirectInputDevice2 IID_IDirectInputDevice2A
  1103. #define IDirectInputDevice2 IDirectInputDevice2A
  1104. #define IDirectInputDevice2Vtbl IDirectInputDevice2AVtbl
  1105. #endif
  1106. typedef struct IDirectInputDevice2 *LPDIRECTINPUTDEVICE2;
  1107.  
  1108. #if !defined(__cplusplus) || defined(CINTERFACE)
  1109. #define IDirectInputDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1110. #define IDirectInputDevice2_AddRef(p) (p)->lpVtbl->AddRef(p)
  1111. #define IDirectInputDevice2_Release(p) (p)->lpVtbl->Release(p)
  1112. #define IDirectInputDevice2_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)
  1113. #define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)
  1114. #define IDirectInputDevice2_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)
  1115. #define IDirectInputDevice2_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)
  1116. #define IDirectInputDevice2_Acquire(p) (p)->lpVtbl->Acquire(p)
  1117. #define IDirectInputDevice2_Unacquire(p) (p)->lpVtbl->Unacquire(p)
  1118. #define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)
  1119. #define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
  1120. #define IDirectInputDevice2_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)
  1121. #define IDirectInputDevice2_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)
  1122. #define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
  1123. #define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)
  1124. #define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)
  1125. #define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  1126. #define IDirectInputDevice2_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
  1127. #define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d)
  1128. #define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c)
  1129. #define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b)
  1130. #define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a)
  1131. #define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a)
  1132. #define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
  1133. #define IDirectInputDevice2_Escape(p,a) (p)->lpVtbl->Escape(p,a)
  1134. #define IDirectInputDevice2_Poll(p) (p)->lpVtbl->Poll(p)
  1135. #define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
  1136. #else
  1137. #define IDirectInputDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1138. #define IDirectInputDevice2_AddRef(p) (p)->AddRef()
  1139. #define IDirectInputDevice2_Release(p) (p)->Release()
  1140. #define IDirectInputDevice2_GetCapabilities(p,a) (p)->GetCapabilities(a)
  1141. #define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)
  1142. #define IDirectInputDevice2_GetProperty(p,a,b) (p)->GetProperty(a,b)
  1143. #define IDirectInputDevice2_SetProperty(p,a,b) (p)->SetProperty(a,b)
  1144. #define IDirectInputDevice2_Acquire(p) (p)->Acquire()
  1145. #define IDirectInputDevice2_Unacquire(p) (p)->Unacquire()
  1146. #define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)
  1147. #define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)
  1148. #define IDirectInputDevice2_SetDataFormat(p,a) (p)->SetDataFormat(a)
  1149. #define IDirectInputDevice2_SetEventNotification(p,a) (p)->SetEventNotification(a)
  1150. #define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
  1151. #define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)
  1152. #define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)
  1153. #define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  1154. #define IDirectInputDevice2_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
  1155. #define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d)
  1156. #define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c)
  1157. #define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b)
  1158. #define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a)
  1159. #define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a)
  1160. #define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
  1161. #define IDirectInputDevice2_Escape(p,a) (p)->Escape(a)
  1162. #define IDirectInputDevice2_Poll(p) (p)->Poll()
  1163. #define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d)
  1164. #endif
  1165.  
  1166. #endif /* DIJ_RINGZERO */
  1167.  
  1168. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  1169.  
  1170. #if(DIRECTINPUT_VERSION >= 0x0700)
  1171. #define DIFEF_DEFAULT               0x00000000
  1172. #define DIFEF_INCLUDENONSTANDARD    0x00000001
  1173. #define DIFEF_MODIFYIFNEEDED        0x00000010
  1174.  
  1175. #ifndef DIJ_RINGZERO
  1176.  
  1177. #undef INTERFACE
  1178. #define INTERFACE IDirectInputDevice7W
  1179.  
  1180. DECLARE_INTERFACE_(IDirectInputDevice7W, IDirectInputDevice2W)
  1181. {
  1182.     /*** IUnknown methods ***/
  1183.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1184.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1185.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1186.  
  1187.     /*** IDirectInputDevice2W methods ***/
  1188.     STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;
  1189.     STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE;
  1190.     STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;
  1191.     STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;
  1192.     STDMETHOD(Acquire)(THIS) PURE;
  1193.     STDMETHOD(Unacquire)(THIS) PURE;
  1194.     STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;
  1195.     STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1196.     STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;
  1197.     STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;
  1198.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;
  1199.     STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE;
  1200.     STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE;
  1201.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1202.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  1203.     STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;
  1204.     STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE;
  1205.     STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE;
  1206.     STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;
  1207.     STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;
  1208.     STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;
  1209.     STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
  1210.     STDMETHOD(Poll)(THIS) PURE;
  1211.     STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1212.  
  1213.     /*** IDirectInputDevice7W methods ***/
  1214.     STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE;
  1215.     STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE;
  1216. };
  1217.  
  1218. typedef struct IDirectInputDevice7W *LPDIRECTINPUTDEVICE7W;
  1219.  
  1220. #undef INTERFACE
  1221. #define INTERFACE IDirectInputDevice7A
  1222.  
  1223. DECLARE_INTERFACE_(IDirectInputDevice7A, IDirectInputDevice2A)
  1224. {
  1225.     /*** IUnknown methods ***/
  1226.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1227.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1228.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1229.  
  1230.     /*** IDirectInputDevice2A methods ***/
  1231.     STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;
  1232.     STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE;
  1233.     STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;
  1234.     STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;
  1235.     STDMETHOD(Acquire)(THIS) PURE;
  1236.     STDMETHOD(Unacquire)(THIS) PURE;
  1237.     STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;
  1238.     STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1239.     STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;
  1240.     STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;
  1241.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;
  1242.     STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE;
  1243.     STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE;
  1244.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1245.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  1246.     STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;
  1247.     STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE;
  1248.     STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE;
  1249.     STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;
  1250.     STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;
  1251.     STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;
  1252.     STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
  1253.     STDMETHOD(Poll)(THIS) PURE;
  1254.     STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1255.  
  1256.     /*** IDirectInputDevice7A methods ***/
  1257.     STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE;
  1258.     STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE;
  1259. };
  1260.  
  1261. typedef struct IDirectInputDevice7A *LPDIRECTINPUTDEVICE7A;
  1262.  
  1263. #ifdef UNICODE
  1264. #define IID_IDirectInputDevice7 IID_IDirectInputDevice7W
  1265. #define IDirectInputDevice7 IDirectInputDevice7W
  1266. #define IDirectInputDevice7Vtbl IDirectInputDevice7WVtbl
  1267. #else
  1268. #define IID_IDirectInputDevice7 IID_IDirectInputDevice7A
  1269. #define IDirectInputDevice7 IDirectInputDevice7A
  1270. #define IDirectInputDevice7Vtbl IDirectInputDevice7AVtbl
  1271. #endif
  1272. typedef struct IDirectInputDevice7 *LPDIRECTINPUTDEVICE7;
  1273.  
  1274. #if !defined(__cplusplus) || defined(CINTERFACE)
  1275. #define IDirectInputDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1276. #define IDirectInputDevice7_AddRef(p) (p)->lpVtbl->AddRef(p)
  1277. #define IDirectInputDevice7_Release(p) (p)->lpVtbl->Release(p)
  1278. #define IDirectInputDevice7_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)
  1279. #define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)
  1280. #define IDirectInputDevice7_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)
  1281. #define IDirectInputDevice7_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)
  1282. #define IDirectInputDevice7_Acquire(p) (p)->lpVtbl->Acquire(p)
  1283. #define IDirectInputDevice7_Unacquire(p) (p)->lpVtbl->Unacquire(p)
  1284. #define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)
  1285. #define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
  1286. #define IDirectInputDevice7_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)
  1287. #define IDirectInputDevice7_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)
  1288. #define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
  1289. #define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)
  1290. #define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)
  1291. #define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  1292. #define IDirectInputDevice7_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
  1293. #define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d)
  1294. #define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c)
  1295. #define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b)
  1296. #define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a)
  1297. #define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a)
  1298. #define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
  1299. #define IDirectInputDevice7_Escape(p,a) (p)->lpVtbl->Escape(p,a)
  1300. #define IDirectInputDevice7_Poll(p) (p)->lpVtbl->Poll(p)
  1301. #define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
  1302. #define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d)
  1303. #define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d)
  1304. #else
  1305. #define IDirectInputDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1306. #define IDirectInputDevice7_AddRef(p) (p)->AddRef()
  1307. #define IDirectInputDevice7_Release(p) (p)->Release()
  1308. #define IDirectInputDevice7_GetCapabilities(p,a) (p)->GetCapabilities(a)
  1309. #define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)
  1310. #define IDirectInputDevice7_GetProperty(p,a,b) (p)->GetProperty(a,b)
  1311. #define IDirectInputDevice7_SetProperty(p,a,b) (p)->SetProperty(a,b)
  1312. #define IDirectInputDevice7_Acquire(p) (p)->Acquire()
  1313. #define IDirectInputDevice7_Unacquire(p) (p)->Unacquire()
  1314. #define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)
  1315. #define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)
  1316. #define IDirectInputDevice7_SetDataFormat(p,a) (p)->SetDataFormat(a)
  1317. #define IDirectInputDevice7_SetEventNotification(p,a) (p)->SetEventNotification(a)
  1318. #define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
  1319. #define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)
  1320. #define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)
  1321. #define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  1322. #define IDirectInputDevice7_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
  1323. #define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d)
  1324. #define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c)
  1325. #define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b)
  1326. #define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a)
  1327. #define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a)
  1328. #define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
  1329. #define IDirectInputDevice7_Escape(p,a) (p)->Escape(a)
  1330. #define IDirectInputDevice7_Poll(p) (p)->Poll()
  1331. #define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d)
  1332. #define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d)
  1333. #define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d)
  1334. #endif
  1335.  
  1336. #endif /* DIJ_RINGZERO */
  1337.  
  1338. #endif /* DIRECTINPUT_VERSION >= 0x0700 */
  1339.  
  1340. /****************************************************************************
  1341.  *
  1342.  *      Mouse
  1343.  *
  1344.  ****************************************************************************/
  1345.  
  1346. #ifndef DIJ_RINGZERO
  1347.  
  1348. typedef struct _DIMOUSESTATE {
  1349.     LONG    lX;
  1350.     LONG    lY;
  1351.     LONG    lZ;
  1352.     BYTE    rgbButtons[4];
  1353. } DIMOUSESTATE, *LPDIMOUSESTATE;
  1354.  
  1355. #if DIRECTINPUT_VERSION >= 0x0700
  1356. typedef struct _DIMOUSESTATE2 {
  1357.     LONG    lX;
  1358.     LONG    lY;
  1359.     LONG    lZ;
  1360.     BYTE    rgbButtons[8];
  1361. } DIMOUSESTATE2, *LPDIMOUSESTATE2;
  1362. #endif
  1363.  
  1364.  
  1365. #define DIMOFS_X        FIELD_OFFSET(DIMOUSESTATE, lX)
  1366. #define DIMOFS_Y        FIELD_OFFSET(DIMOUSESTATE, lY)
  1367. #define DIMOFS_Z        FIELD_OFFSET(DIMOUSESTATE, lZ)
  1368. #define DIMOFS_BUTTON0 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0)
  1369. #define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1)
  1370. #define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2)
  1371. #define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3)
  1372. #if (DIRECTINPUT_VERSION >= 0x0700)
  1373. #define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4)
  1374. #define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5)
  1375. #define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6)
  1376. #define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7)
  1377. #endif
  1378. #endif /* DIJ_RINGZERO */
  1379.  
  1380. /****************************************************************************
  1381.  *
  1382.  *      Keyboard
  1383.  *
  1384.  ****************************************************************************/
  1385.  
  1386. #ifndef DIJ_RINGZERO
  1387.  
  1388. /****************************************************************************
  1389.  *
  1390.  *      DirectInput keyboard scan codes
  1391.  *
  1392.  ****************************************************************************/
  1393.  
  1394. #define DIK_ESCAPE          0x01
  1395. #define DIK_1               0x02
  1396. #define DIK_2               0x03
  1397. #define DIK_3               0x04
  1398. #define DIK_4               0x05
  1399. #define DIK_5               0x06
  1400. #define DIK_6               0x07
  1401. #define DIK_7               0x08
  1402. #define DIK_8               0x09
  1403. #define DIK_9               0x0A
  1404. #define DIK_0               0x0B
  1405. #define DIK_MINUS           0x0C    /* - on main keyboard */
  1406. #define DIK_EQUALS          0x0D
  1407. #define DIK_BACK            0x0E    /* backspace */
  1408. #define DIK_TAB             0x0F
  1409. #define DIK_Q               0x10
  1410. #define DIK_W               0x11
  1411. #define DIK_E               0x12
  1412. #define DIK_R               0x13
  1413. #define DIK_T               0x14
  1414. #define DIK_Y               0x15
  1415. #define DIK_U               0x16
  1416. #define DIK_I               0x17
  1417. #define DIK_O               0x18
  1418. #define DIK_P               0x19
  1419. #define DIK_LBRACKET        0x1A
  1420. #define DIK_RBRACKET        0x1B
  1421. #define DIK_RETURN          0x1C    /* Enter on main keyboard */
  1422. #define DIK_LCONTROL        0x1D
  1423. #define DIK_A               0x1E
  1424. #define DIK_S               0x1F
  1425. #define DIK_D               0x20
  1426. #define DIK_F               0x21
  1427. #define DIK_G               0x22
  1428. #define DIK_H               0x23
  1429. #define DIK_J               0x24
  1430. #define DIK_K               0x25
  1431. #define DIK_L               0x26
  1432. #define DIK_SEMICOLON       0x27
  1433. #define DIK_APOSTROPHE      0x28
  1434. #define DIK_GRAVE           0x29    /* accent grave */
  1435. #define DIK_LSHIFT          0x2A
  1436. #define DIK_BACKSLASH       0x2B
  1437. #define DIK_Z               0x2C
  1438. #define DIK_X               0x2D
  1439. #define DIK_C               0x2E
  1440. #define DIK_V               0x2F
  1441. #define DIK_B               0x30
  1442. #define DIK_N               0x31
  1443. #define DIK_M               0x32
  1444. #define DIK_COMMA           0x33
  1445. #define DIK_PERIOD          0x34    /* . on main keyboard */
  1446. #define DIK_SLASH           0x35    /* / on main keyboard */
  1447. #define DIK_RSHIFT          0x36
  1448. #define DIK_MULTIPLY        0x37    /* * on numeric keypad */
  1449. #define DIK_LMENU           0x38    /* left Alt */
  1450. #define DIK_SPACE           0x39
  1451. #define DIK_CAPITAL         0x3A
  1452. #define DIK_F1              0x3B
  1453. #define DIK_F2              0x3C
  1454. #define DIK_F3              0x3D
  1455. #define DIK_F4              0x3E
  1456. #define DIK_F5              0x3F
  1457. #define DIK_F6              0x40
  1458. #define DIK_F7              0x41
  1459. #define DIK_F8              0x42
  1460. #define DIK_F9              0x43
  1461. #define DIK_F10             0x44
  1462. #define DIK_NUMLOCK         0x45
  1463. #define DIK_SCROLL          0x46    /* Scroll Lock */
  1464. #define DIK_NUMPAD7         0x47
  1465. #define DIK_NUMPAD8         0x48
  1466. #define DIK_NUMPAD9         0x49
  1467. #define DIK_SUBTRACT        0x4A    /* - on numeric keypad */
  1468. #define DIK_NUMPAD4         0x4B
  1469. #define DIK_NUMPAD5         0x4C
  1470. #define DIK_NUMPAD6         0x4D
  1471. #define DIK_ADD             0x4E    /* + on numeric keypad */
  1472. #define DIK_NUMPAD1         0x4F
  1473. #define DIK_NUMPAD2         0x50
  1474. #define DIK_NUMPAD3         0x51
  1475. #define DIK_NUMPAD0         0x52
  1476. #define DIK_DECIMAL         0x53    /* . on numeric keypad */
  1477. #define DIK_OEM_102         0x56    /* < > | on UK/Germany keyboards */
  1478. #define DIK_F11             0x57
  1479. #define DIK_F12             0x58
  1480.  
  1481. #define DIK_F13             0x64    /*                     (NEC PC98) */
  1482. #define DIK_F14             0x65    /*                     (NEC PC98) */
  1483. #define DIK_F15             0x66    /*                     (NEC PC98) */
  1484.  
  1485. #define DIK_KANA            0x70    /* (Japanese keyboard)            */
  1486. #define DIK_ABNT_C1         0x73    /* / ? on Portugese (Brazilian) keyboards */
  1487. #define DIK_CONVERT         0x79    /* (Japanese keyboard)            */
  1488. #define DIK_NOCONVERT       0x7B    /* (Japanese keyboard)            */
  1489. #define DIK_YEN             0x7D    /* (Japanese keyboard)            */
  1490. #define DIK_ABNT_C2         0x7E    /* Numpad . on Portugese (Brazilian) keyboards */
  1491. #define DIK_NUMPADEQUALS    0x8D    /* = on numeric keypad (NEC PC98) */
  1492. #define DIK_PREVTRACK       0x90    /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */
  1493. #define DIK_AT              0x91    /*                     (NEC PC98) */
  1494. #define DIK_COLON           0x92    /*                     (NEC PC98) */
  1495. #define DIK_UNDERLINE       0x93    /*                     (NEC PC98) */
  1496. #define DIK_KANJI           0x94    /* (Japanese keyboard)            */
  1497. #define DIK_STOP            0x95    /*                     (NEC PC98) */
  1498. #define DIK_AX              0x96    /*                     (Japan AX) */
  1499. #define DIK_UNLABELED       0x97    /*                        (J3100) */
  1500. #define DIK_NEXTTRACK       0x99    /* Next Track */
  1501. #define DIK_NUMPADENTER     0x9C    /* Enter on numeric keypad */
  1502. #define DIK_RCONTROL        0x9D
  1503. #define DIK_MUTE            0xA0    /* Mute */
  1504. #define DIK_CALCULATOR      0xA1    /* Calculator */
  1505. #define DIK_PLAYPAUSE       0xA2    /* Play / Pause */
  1506. #define DIK_MEDIASTOP       0xA4    /* Media Stop */
  1507. #define DIK_VOLUMEDOWN      0xAE    /* Volume - */
  1508. #define DIK_VOLUMEUP        0xB0    /* Volume + */
  1509. #define DIK_WEBHOME         0xB2    /* Web home */
  1510. #define DIK_NUMPADCOMMA     0xB3    /* , on numeric keypad (NEC PC98) */
  1511. #define DIK_DIVIDE          0xB5    /* / on numeric keypad */
  1512. #define DIK_SYSRQ           0xB7
  1513. #define DIK_RMENU           0xB8    /* right Alt */
  1514. #define DIK_PAUSE           0xC5    /* Pause */
  1515. #define DIK_HOME            0xC7    /* Home on arrow keypad */
  1516. #define DIK_UP              0xC8    /* UpArrow on arrow keypad */
  1517. #define DIK_PRIOR           0xC9    /* PgUp on arrow keypad */
  1518. #define DIK_LEFT            0xCB    /* LeftArrow on arrow keypad */
  1519. #define DIK_RIGHT           0xCD    /* RightArrow on arrow keypad */
  1520. #define DIK_END             0xCF    /* End on arrow keypad */
  1521. #define DIK_DOWN            0xD0    /* DownArrow on arrow keypad */
  1522. #define DIK_NEXT            0xD1    /* PgDn on arrow keypad */
  1523. #define DIK_INSERT          0xD2    /* Insert on arrow keypad */
  1524. #define DIK_DELETE          0xD3    /* Delete on arrow keypad */
  1525. #define DIK_LWIN            0xDB    /* Left Windows key */
  1526. #define DIK_RWIN            0xDC    /* Right Windows key */
  1527. #define DIK_APPS            0xDD    /* AppMenu key */
  1528. #define DIK_POWER           0xDE    /* System Power */
  1529. #define DIK_SLEEP           0xDF    /* System Sleep */
  1530. #define DIK_WAKE            0xE3    /* System Wake */
  1531. #define DIK_WEBSEARCH       0xE5    /* Web Search */
  1532. #define DIK_WEBFAVORITES    0xE6    /* Web Favorites */
  1533. #define DIK_WEBREFRESH      0xE7    /* Web Refresh */
  1534. #define DIK_WEBSTOP         0xE8    /* Web Stop */
  1535. #define DIK_WEBFORWARD      0xE9    /* Web Forward */
  1536. #define DIK_WEBBACK         0xEA    /* Web Back */
  1537. #define DIK_MYCOMPUTER      0xEB    /* My Computer */
  1538. #define DIK_MAIL            0xEC    /* Mail */
  1539. #define DIK_MEDIASELECT     0xED    /* Media Select */
  1540.  
  1541. /*
  1542.  *  Alternate names for keys, to facilitate transition from DOS.
  1543.  */
  1544. #define DIK_BACKSPACE       DIK_BACK            /* backspace */
  1545. #define DIK_NUMPADSTAR      DIK_MULTIPLY        /* * on numeric keypad */
  1546. #define DIK_LALT            DIK_LMENU           /* left Alt */
  1547. #define DIK_CAPSLOCK        DIK_CAPITAL         /* CapsLock */
  1548. #define DIK_NUMPADMINUS     DIK_SUBTRACT        /* - on numeric keypad */
  1549. #define DIK_NUMPADPLUS      DIK_ADD             /* + on numeric keypad */
  1550. #define DIK_NUMPADPERIOD    DIK_DECIMAL         /* . on numeric keypad */
  1551. #define DIK_NUMPADSLASH     DIK_DIVIDE          /* / on numeric keypad */
  1552. #define DIK_RALT            DIK_RMENU           /* right Alt */
  1553. #define DIK_UPARROW         DIK_UP              /* UpArrow on arrow keypad */
  1554. #define DIK_PGUP            DIK_PRIOR           /* PgUp on arrow keypad */
  1555. #define DIK_LEFTARROW       DIK_LEFT            /* LeftArrow on arrow keypad */
  1556. #define DIK_RIGHTARROW      DIK_RIGHT           /* RightArrow on arrow keypad */
  1557. #define DIK_DOWNARROW       DIK_DOWN            /* DownArrow on arrow keypad */
  1558. #define DIK_PGDN            DIK_NEXT            /* PgDn on arrow keypad */
  1559.  
  1560. /*
  1561.  *  Alternate names for keys originally not used on US keyboards.
  1562.  */
  1563. #define DIK_CIRCUMFLEX      DIK_PREVTRACK       /* Japanese keyboard */
  1564.  
  1565. #endif /* DIJ_RINGZERO */
  1566.  
  1567. /****************************************************************************
  1568.  *
  1569.  *      Joystick
  1570.  *
  1571.  ****************************************************************************/
  1572.  
  1573. #ifndef DIJ_RINGZERO
  1574.  
  1575. typedef struct DIJOYSTATE {
  1576.     LONG    lX;                     /* x-axis position              */
  1577.     LONG    lY;                     /* y-axis position              */
  1578.     LONG    lZ;                     /* z-axis position              */
  1579.     LONG    lRx;                    /* x-axis rotation              */
  1580.     LONG    lRy;                    /* y-axis rotation              */
  1581.     LONG    lRz;                    /* z-axis rotation              */
  1582.     LONG    rglSlider[2];           /* extra axes positions         */
  1583.     DWORD   rgdwPOV[4];             /* POV directions               */
  1584.     BYTE    rgbButtons[32];         /* 32 buttons                   */
  1585. } DIJOYSTATE, *LPDIJOYSTATE;
  1586.  
  1587. typedef struct DIJOYSTATE2 {
  1588.     LONG    lX;                     /* x-axis position              */
  1589.     LONG    lY;                     /* y-axis position              */
  1590.     LONG    lZ;                     /* z-axis position              */
  1591.     LONG    lRx;                    /* x-axis rotation              */
  1592.     LONG    lRy;                    /* y-axis rotation              */
  1593.     LONG    lRz;                    /* z-axis rotation              */
  1594.     LONG    rglSlider[2];           /* extra axes positions         */
  1595.     DWORD   rgdwPOV[4];             /* POV directions               */
  1596.     BYTE    rgbButtons[128];        /* 128 buttons                  */
  1597.     LONG    lVX;                    /* x-axis velocity              */
  1598.     LONG    lVY;                    /* y-axis velocity              */
  1599.     LONG    lVZ;                    /* z-axis velocity              */
  1600.     LONG    lVRx;                   /* x-axis angular velocity      */
  1601.     LONG    lVRy;                   /* y-axis angular velocity      */
  1602.     LONG    lVRz;                   /* z-axis angular velocity      */
  1603.     LONG    rglVSlider[2];          /* extra axes velocities        */
  1604.     LONG    lAX;                    /* x-axis acceleration          */
  1605.     LONG    lAY;                    /* y-axis acceleration          */
  1606.     LONG    lAZ;                    /* z-axis acceleration          */
  1607.     LONG    lARx;                   /* x-axis angular acceleration  */
  1608.     LONG    lARy;                   /* y-axis angular acceleration  */
  1609.     LONG    lARz;                   /* z-axis angular acceleration  */
  1610.     LONG    rglASlider[2];          /* extra axes accelerations     */
  1611.     LONG    lFX;                    /* x-axis force                 */
  1612.     LONG    lFY;                    /* y-axis force                 */
  1613.     LONG    lFZ;                    /* z-axis force                 */
  1614.     LONG    lFRx;                   /* x-axis torque                */
  1615.     LONG    lFRy;                   /* y-axis torque                */
  1616.     LONG    lFRz;                   /* z-axis torque                */
  1617.     LONG    rglFSlider[2];          /* extra axes forces            */
  1618. } DIJOYSTATE2, *LPDIJOYSTATE2;
  1619.  
  1620. #define DIJOFS_X            FIELD_OFFSET(DIJOYSTATE, lX)
  1621. #define DIJOFS_Y            FIELD_OFFSET(DIJOYSTATE, lY)
  1622. #define DIJOFS_Z            FIELD_OFFSET(DIJOYSTATE, lZ)
  1623. #define DIJOFS_RX           FIELD_OFFSET(DIJOYSTATE, lRx)
  1624. #define DIJOFS_RY           FIELD_OFFSET(DIJOYSTATE, lRy)
  1625. #define DIJOFS_RZ           FIELD_OFFSET(DIJOYSTATE, lRz)
  1626. #define DIJOFS_SLIDER(n)   (FIELD_OFFSET(DIJOYSTATE, rglSlider) + \
  1627.                                                         (n) * sizeof(LONG))
  1628. #define DIJOFS_POV(n)      (FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \
  1629.                                                         (n) * sizeof(DWORD))
  1630. #define DIJOFS_BUTTON(n)   (FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n))
  1631. #define DIJOFS_BUTTON0      DIJOFS_BUTTON(0)
  1632. #define DIJOFS_BUTTON1      DIJOFS_BUTTON(1)
  1633. #define DIJOFS_BUTTON2      DIJOFS_BUTTON(2)
  1634. #define DIJOFS_BUTTON3      DIJOFS_BUTTON(3)
  1635. #define DIJOFS_BUTTON4      DIJOFS_BUTTON(4)
  1636. #define DIJOFS_BUTTON5      DIJOFS_BUTTON(5)
  1637. #define DIJOFS_BUTTON6      DIJOFS_BUTTON(6)
  1638. #define DIJOFS_BUTTON7      DIJOFS_BUTTON(7)
  1639. #define DIJOFS_BUTTON8      DIJOFS_BUTTON(8)
  1640. #define DIJOFS_BUTTON9      DIJOFS_BUTTON(9)
  1641. #define DIJOFS_BUTTON10     DIJOFS_BUTTON(10)
  1642. #define DIJOFS_BUTTON11     DIJOFS_BUTTON(11)
  1643. #define DIJOFS_BUTTON12     DIJOFS_BUTTON(12)
  1644. #define DIJOFS_BUTTON13     DIJOFS_BUTTON(13)
  1645. #define DIJOFS_BUTTON14     DIJOFS_BUTTON(14)
  1646. #define DIJOFS_BUTTON15     DIJOFS_BUTTON(15)
  1647. #define DIJOFS_BUTTON16     DIJOFS_BUTTON(16)
  1648. #define DIJOFS_BUTTON17     DIJOFS_BUTTON(17)
  1649. #define DIJOFS_BUTTON18     DIJOFS_BUTTON(18)
  1650. #define DIJOFS_BUTTON19     DIJOFS_BUTTON(19)
  1651. #define DIJOFS_BUTTON20     DIJOFS_BUTTON(20)
  1652. #define DIJOFS_BUTTON21     DIJOFS_BUTTON(21)
  1653. #define DIJOFS_BUTTON22     DIJOFS_BUTTON(22)
  1654. #define DIJOFS_BUTTON23     DIJOFS_BUTTON(23)
  1655. #define DIJOFS_BUTTON24     DIJOFS_BUTTON(24)
  1656. #define DIJOFS_BUTTON25     DIJOFS_BUTTON(25)
  1657. #define DIJOFS_BUTTON26     DIJOFS_BUTTON(26)
  1658. #define DIJOFS_BUTTON27     DIJOFS_BUTTON(27)
  1659. #define DIJOFS_BUTTON28     DIJOFS_BUTTON(28)
  1660. #define DIJOFS_BUTTON29     DIJOFS_BUTTON(29)
  1661. #define DIJOFS_BUTTON30     DIJOFS_BUTTON(30)
  1662. #define DIJOFS_BUTTON31     DIJOFS_BUTTON(31)
  1663.  
  1664.  
  1665. #endif /* DIJ_RINGZERO */
  1666.  
  1667. /****************************************************************************
  1668.  *
  1669.  *  IDirectInput
  1670.  *
  1671.  ****************************************************************************/
  1672.  
  1673. #ifndef DIJ_RINGZERO
  1674.  
  1675. #define DIENUM_STOP             0
  1676. #define DIENUM_CONTINUE         1
  1677.  
  1678. typedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA, LPVOID);
  1679. typedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW, LPVOID);
  1680. #ifdef UNICODE
  1681. #define LPDIENUMDEVICESCALLBACK  LPDIENUMDEVICESCALLBACKW
  1682. #else
  1683. #define LPDIENUMDEVICESCALLBACK  LPDIENUMDEVICESCALLBACKA
  1684. #endif // !UNICODE
  1685.  
  1686. #define DIEDFL_ALLDEVICES       0x00000000
  1687. #define DIEDFL_ATTACHEDONLY     0x00000001
  1688. #if(DIRECTINPUT_VERSION >= 0x0500)
  1689. #define DIEDFL_FORCEFEEDBACK    0x00000100
  1690. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  1691. #if(DIRECTINPUT_VERSION >= 0x050a)
  1692. #define DIEDFL_INCLUDEALIASES   0x00010000
  1693. #define DIEDFL_INCLUDEPHANTOMS  0x00020000
  1694. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  1695.  
  1696. #undef INTERFACE
  1697. #define INTERFACE IDirectInputW
  1698.  
  1699. DECLARE_INTERFACE_(IDirectInputW, IUnknown)
  1700. {
  1701.     /*** IUnknown methods ***/
  1702.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1703.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1704.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1705.  
  1706.     /*** IDirectInputW methods ***/
  1707.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE;
  1708.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE;
  1709.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  1710.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1711.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  1712. };
  1713.  
  1714. typedef struct IDirectInputW *LPDIRECTINPUTW;
  1715.  
  1716. #undef INTERFACE
  1717. #define INTERFACE IDirectInputA
  1718.  
  1719. DECLARE_INTERFACE_(IDirectInputA, IUnknown)
  1720. {
  1721.     /*** IUnknown methods ***/
  1722.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1723.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1724.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1725.  
  1726.     /*** IDirectInputA methods ***/
  1727.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE;
  1728.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE;
  1729.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  1730.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1731.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  1732. };
  1733.  
  1734. typedef struct IDirectInputA *LPDIRECTINPUTA;
  1735.  
  1736. #ifdef UNICODE
  1737. #define IID_IDirectInput IID_IDirectInputW
  1738. #define IDirectInput IDirectInputW
  1739. #define IDirectInputVtbl IDirectInputWVtbl
  1740. #else
  1741. #define IID_IDirectInput IID_IDirectInputA
  1742. #define IDirectInput IDirectInputA
  1743. #define IDirectInputVtbl IDirectInputAVtbl
  1744. #endif
  1745. typedef struct IDirectInput *LPDIRECTINPUT;
  1746.  
  1747. #if !defined(__cplusplus) || defined(CINTERFACE)
  1748. #define IDirectInput_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1749. #define IDirectInput_AddRef(p) (p)->lpVtbl->AddRef(p)
  1750. #define IDirectInput_Release(p) (p)->lpVtbl->Release(p)
  1751. #define IDirectInput_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
  1752. #define IDirectInput_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
  1753. #define IDirectInput_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)
  1754. #define IDirectInput_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  1755. #define IDirectInput_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
  1756. #else
  1757. #define IDirectInput_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1758. #define IDirectInput_AddRef(p) (p)->AddRef()
  1759. #define IDirectInput_Release(p) (p)->Release()
  1760. #define IDirectInput_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
  1761. #define IDirectInput_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
  1762. #define IDirectInput_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)
  1763. #define IDirectInput_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  1764. #define IDirectInput_Initialize(p,a,b) (p)->Initialize(a,b)
  1765. #endif
  1766.  
  1767. #undef INTERFACE
  1768. #define INTERFACE IDirectInput2W
  1769.  
  1770. DECLARE_INTERFACE_(IDirectInput2W, IDirectInputW)
  1771. {
  1772.     /*** IUnknown methods ***/
  1773.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1774.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1775.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1776.  
  1777.     /*** IDirectInputW methods ***/
  1778.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE;
  1779.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE;
  1780.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  1781.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1782.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  1783.  
  1784.     /*** IDirectInput2W methods ***/
  1785.     STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE;
  1786. };
  1787.  
  1788. typedef struct IDirectInput2W *LPDIRECTINPUT2W;
  1789.  
  1790. #undef INTERFACE
  1791. #define INTERFACE IDirectInput2A
  1792.  
  1793. DECLARE_INTERFACE_(IDirectInput2A, IDirectInputA)
  1794. {
  1795.     /*** IUnknown methods ***/
  1796.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1797.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1798.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1799.  
  1800.     /*** IDirectInputA methods ***/
  1801.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE;
  1802.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE;
  1803.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  1804.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1805.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  1806.  
  1807.     /*** IDirectInput2A methods ***/
  1808.     STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE;
  1809. };
  1810.  
  1811. typedef struct IDirectInput2A *LPDIRECTINPUT2A;
  1812.  
  1813. #ifdef UNICODE
  1814. #define IID_IDirectInput2 IID_IDirectInput2W
  1815. #define IDirectInput2 IDirectInput2W
  1816. #define IDirectInput2Vtbl IDirectInput2WVtbl
  1817. #else
  1818. #define IID_IDirectInput2 IID_IDirectInput2A
  1819. #define IDirectInput2 IDirectInput2A
  1820. #define IDirectInput2Vtbl IDirectInput2AVtbl
  1821. #endif
  1822. typedef struct IDirectInput2 *LPDIRECTINPUT2;
  1823.  
  1824. #if !defined(__cplusplus) || defined(CINTERFACE)
  1825. #define IDirectInput2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1826. #define IDirectInput2_AddRef(p) (p)->lpVtbl->AddRef(p)
  1827. #define IDirectInput2_Release(p) (p)->lpVtbl->Release(p)
  1828. #define IDirectInput2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
  1829. #define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
  1830. #define IDirectInput2_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)
  1831. #define IDirectInput2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  1832. #define IDirectInput2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
  1833. #define IDirectInput2_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c)
  1834. #else
  1835. #define IDirectInput2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1836. #define IDirectInput2_AddRef(p) (p)->AddRef()
  1837. #define IDirectInput2_Release(p) (p)->Release()
  1838. #define IDirectInput2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
  1839. #define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
  1840. #define IDirectInput2_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)
  1841. #define IDirectInput2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  1842. #define IDirectInput2_Initialize(p,a,b) (p)->Initialize(a,b)
  1843. #define IDirectInput2_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c)
  1844. #endif
  1845.  
  1846.  
  1847. #undef INTERFACE
  1848. #define INTERFACE IDirectInput7W
  1849.  
  1850. DECLARE_INTERFACE_(IDirectInput7W, IDirectInput2W)
  1851. {
  1852.     /*** IUnknown methods ***/
  1853.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1854.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1855.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1856.  
  1857.     /*** IDirectInput2W methods ***/
  1858.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE;
  1859.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE;
  1860.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  1861.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1862.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  1863.     STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE;
  1864.  
  1865.     /*** IDirectInput7W methods ***/
  1866.     STDMETHOD(CreateDeviceEx)(THIS_ REFGUID,REFIID,LPVOID *,LPUNKNOWN) PURE;
  1867. };
  1868.  
  1869. typedef struct IDirectInput7W *LPDIRECTINPUT7W;
  1870.  
  1871. #undef INTERFACE
  1872. #define INTERFACE IDirectInput7A
  1873.  
  1874. DECLARE_INTERFACE_(IDirectInput7A, IDirectInput2A)
  1875. {
  1876.     /*** IUnknown methods ***/
  1877.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1878.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1879.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1880.  
  1881.     /*** IDirectInput2A methods ***/
  1882.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE;
  1883.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE;
  1884.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  1885.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1886.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  1887.     STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE;
  1888.  
  1889.     /*** IDirectInput7A methods ***/
  1890.     STDMETHOD(CreateDeviceEx)(THIS_ REFGUID,REFIID,LPVOID *,LPUNKNOWN) PURE;
  1891. };
  1892.  
  1893. typedef struct IDirectInput7A *LPDIRECTINPUT7A;
  1894.  
  1895. #ifdef UNICODE
  1896. #define IID_IDirectInput7 IID_IDirectInput7W
  1897. #define IDirectInput7 IDirectInput7W
  1898. #define IDirectInput7Vtbl IDirectInput7WVtbl
  1899. #else
  1900. #define IID_IDirectInput7 IID_IDirectInput7A
  1901. #define IDirectInput7 IDirectInput7A
  1902. #define IDirectInput7Vtbl IDirectInput7AVtbl
  1903. #endif
  1904. typedef struct IDirectInput7 *LPDIRECTINPUT7;
  1905.  
  1906. #if !defined(__cplusplus) || defined(CINTERFACE)
  1907. #define IDirectInput7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1908. #define IDirectInput7_AddRef(p) (p)->lpVtbl->AddRef(p)
  1909. #define IDirectInput7_Release(p) (p)->lpVtbl->Release(p)
  1910. #define IDirectInput7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
  1911. #define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
  1912. #define IDirectInput7_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)
  1913. #define IDirectInput7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  1914. #define IDirectInput7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
  1915. #define IDirectInput7_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c)
  1916. #define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d)
  1917. #else
  1918. #define IDirectInput7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1919. #define IDirectInput7_AddRef(p) (p)->AddRef()
  1920. #define IDirectInput7_Release(p) (p)->Release()
  1921. #define IDirectInput7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
  1922. #define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
  1923. #define IDirectInput7_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)
  1924. #define IDirectInput7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  1925. #define IDirectInput7_Initialize(p,a,b) (p)->Initialize(a,b)
  1926. #define IDirectInput7_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c)
  1927. #define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->CreateDeviceEx(a,b,c,d)
  1928. #endif
  1929.  
  1930. extern HRESULT WINAPI DirectInputCreateA(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTA *ppDI, LPUNKNOWN punkOuter);
  1931. extern HRESULT WINAPI DirectInputCreateW(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTW *ppDI, LPUNKNOWN punkOuter);
  1932. #ifdef UNICODE
  1933. #define DirectInputCreate  DirectInputCreateW
  1934. #else
  1935. #define DirectInputCreate  DirectInputCreateA
  1936. #endif // !UNICODE
  1937.  
  1938. extern HRESULT WINAPI DirectInputCreateEx(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter);
  1939. #endif /* DIJ_RINGZERO */
  1940.  
  1941.  
  1942. /****************************************************************************
  1943.  *
  1944.  *  Return Codes
  1945.  *
  1946.  ****************************************************************************/
  1947.  
  1948. /*
  1949.  *  The operation completed successfully.
  1950.  */
  1951. #define DI_OK                           S_OK
  1952.  
  1953. /*
  1954.  *  The device exists but is not currently attached.
  1955.  */
  1956. #define DI_NOTATTACHED                  S_FALSE
  1957.  
  1958. /*
  1959.  *  The device buffer overflowed.  Some input was lost.
  1960.  */
  1961. #define DI_BUFFEROVERFLOW               S_FALSE
  1962.  
  1963. /*
  1964.  *  The change in device properties had no effect.
  1965.  */
  1966. #define DI_PROPNOEFFECT                 S_FALSE
  1967.  
  1968. /*
  1969.  *  The operation had no effect.
  1970.  */
  1971. #define DI_NOEFFECT                     S_FALSE
  1972.  
  1973. /*
  1974.  *  The device is a polled device.  As a result, device buffering
  1975.  *  will not collect any data and event notifications will not be
  1976.  *  signalled until GetDeviceState is called.
  1977.  */
  1978. #define DI_POLLEDDEVICE                 ((HRESULT)0x00000002L)
  1979.  
  1980. /*
  1981.  *  The parameters of the effect were successfully updated by
  1982.  *  IDirectInputEffect::SetParameters, but the effect was not
  1983.  *  downloaded because the device is not exclusively acquired
  1984.  *  or because the DIEP_NODOWNLOAD flag was passed.
  1985.  */
  1986. #define DI_DOWNLOADSKIPPED              ((HRESULT)0x00000003L)
  1987.  
  1988. /*
  1989.  *  The parameters of the effect were successfully updated by
  1990.  *  IDirectInputEffect::SetParameters, but in order to change
  1991.  *  the parameters, the effect needed to be restarted.
  1992.  */
  1993. #define DI_EFFECTRESTARTED              ((HRESULT)0x00000004L)
  1994.  
  1995. /*
  1996.  *  The parameters of the effect were successfully updated by
  1997.  *  IDirectInputEffect::SetParameters, but some of them were
  1998.  *  beyond the capabilities of the device and were truncated.
  1999.  */
  2000. #define DI_TRUNCATED                    ((HRESULT)0x00000008L)
  2001.  
  2002. /*
  2003.  *  Equal to DI_EFFECTRESTARTED | DI_TRUNCATED.
  2004.  */
  2005. #define DI_TRUNCATEDANDRESTARTED        ((HRESULT)0x0000000CL)
  2006.  
  2007. /*
  2008.  *  The application requires a newer version of DirectInput.
  2009.  */
  2010. #define DIERR_OLDDIRECTINPUTVERSION     \
  2011.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION)
  2012.  
  2013. /*
  2014.  *  The application was written for an unsupported prerelease version
  2015.  *  of DirectInput.
  2016.  */
  2017. #define DIERR_BETADIRECTINPUTVERSION    \
  2018.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP)
  2019.  
  2020. /*
  2021.  *  The object could not be created due to an incompatible driver version
  2022.  *  or mismatched or incomplete driver components.
  2023.  */
  2024. #define DIERR_BADDRIVERVER              \
  2025.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL)
  2026.  
  2027. /*
  2028.  * The device or device instance or effect is not registered with DirectInput.
  2029.  */
  2030. #define DIERR_DEVICENOTREG              REGDB_E_CLASSNOTREG
  2031.  
  2032. /*
  2033.  * The requested object does not exist.
  2034.  */
  2035. #define DIERR_NOTFOUND                  \
  2036.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)
  2037.  
  2038. /*
  2039.  * The requested object does not exist.
  2040.  */
  2041. #define DIERR_OBJECTNOTFOUND            \
  2042.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)
  2043.  
  2044. /*
  2045.  * An invalid parameter was passed to the returning function,
  2046.  * or the object was not in a state that admitted the function
  2047.  * to be called.
  2048.  */
  2049. #define DIERR_INVALIDPARAM              E_INVALIDARG
  2050.  
  2051. /*
  2052.  * The specified interface is not supported by the object
  2053.  */
  2054. #define DIERR_NOINTERFACE               E_NOINTERFACE
  2055.  
  2056. /*
  2057.  * An undetermined error occured inside the DInput subsystem
  2058.  */
  2059. #define DIERR_GENERIC                   E_FAIL
  2060.  
  2061. /*
  2062.  * The DInput subsystem couldn't allocate sufficient memory to complete the
  2063.  * caller's request.
  2064.  */
  2065. #define DIERR_OUTOFMEMORY               E_OUTOFMEMORY
  2066.  
  2067. /*
  2068.  * The function called is not supported at this time
  2069.  */
  2070. #define DIERR_UNSUPPORTED               E_NOTIMPL
  2071.  
  2072. /*
  2073.  * This object has not been initialized
  2074.  */
  2075. #define DIERR_NOTINITIALIZED            \
  2076.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY)
  2077.  
  2078. /*
  2079.  * This object is already initialized
  2080.  */
  2081. #define DIERR_ALREADYINITIALIZED        \
  2082.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED)
  2083.  
  2084. /*
  2085.  * This object does not support aggregation
  2086.  */
  2087. #define DIERR_NOAGGREGATION             CLASS_E_NOAGGREGATION
  2088.  
  2089. /*
  2090.  * Another app has a higher priority level, preventing this call from
  2091.  * succeeding.
  2092.  */
  2093. #define DIERR_OTHERAPPHASPRIO           E_ACCESSDENIED
  2094.  
  2095. /*
  2096.  * Access to the device has been lost.  It must be re-acquired.
  2097.  */
  2098. #define DIERR_INPUTLOST                 \
  2099.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT)
  2100.  
  2101. /*
  2102.  * The operation cannot be performed while the device is acquired.
  2103.  */
  2104. #define DIERR_ACQUIRED                  \
  2105.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY)
  2106.  
  2107. /*
  2108.  * The operation cannot be performed unless the device is acquired.
  2109.  */
  2110. #define DIERR_NOTACQUIRED               \
  2111.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS)
  2112.  
  2113. /*
  2114.  * The specified property cannot be changed.
  2115.  */
  2116. #define DIERR_READONLY                  E_ACCESSDENIED
  2117.  
  2118. /*
  2119.  * The device already has an event notification associated with it.
  2120.  */
  2121. #define DIERR_HANDLEEXISTS              E_ACCESSDENIED
  2122.  
  2123. /*
  2124.  * Data is not yet available.
  2125.  */
  2126. #ifndef E_PENDING
  2127. #define E_PENDING                       0x8000000AL
  2128. #endif
  2129.  
  2130. /*
  2131.  * Unable to IDirectInputJoyConfig_Acquire because the user
  2132.  * does not have sufficient privileges to change the joystick
  2133.  * configuration.
  2134.  */
  2135. #define DIERR_INSUFFICIENTPRIVS         0x80040200L
  2136.  
  2137. /*
  2138.  * The device is full.
  2139.  */
  2140. #define DIERR_DEVICEFULL                0x80040201L
  2141.  
  2142. /*
  2143.  * Not all the requested information fit into the buffer.
  2144.  */
  2145. #define DIERR_MOREDATA                  0x80040202L
  2146.  
  2147. /*
  2148.  * The effect is not downloaded.
  2149.  */
  2150. #define DIERR_NOTDOWNLOADED             0x80040203L
  2151.  
  2152. /*
  2153.  *  The device cannot be reinitialized because there are still effects
  2154.  *  attached to it.
  2155.  */
  2156. #define DIERR_HASEFFECTS                0x80040204L
  2157.  
  2158. /*
  2159.  *  The operation cannot be performed unless the device is acquired
  2160.  *  in DISCL_EXCLUSIVE mode.
  2161.  */
  2162. #define DIERR_NOTEXCLUSIVEACQUIRED      0x80040205L
  2163.  
  2164. /*
  2165.  *  The effect could not be downloaded because essential information
  2166.  *  is missing.  For example, no axes have been associated with the
  2167.  *  effect, or no type-specific information has been created.
  2168.  */
  2169. #define DIERR_INCOMPLETEEFFECT          0x80040206L
  2170.  
  2171. /*
  2172.  *  Attempted to read buffered device data from a device that is
  2173.  *  not buffered.
  2174.  */
  2175. #define DIERR_NOTBUFFERED               0x80040207L
  2176.  
  2177. /*
  2178.  *  An attempt was made to modify parameters of an effect while it is
  2179.  *  playing.  Not all hardware devices support altering the parameters
  2180.  *  of an effect while it is playing.
  2181.  */
  2182. #define DIERR_EFFECTPLAYING             0x80040208L
  2183.  
  2184. /*
  2185.  *  The operation could not be completed because the device is not
  2186.  *  plugged in.
  2187.  */
  2188. #define DIERR_UNPLUGGED                 0x80040209L
  2189.  
  2190. /*
  2191.  *  SendDeviceData failed because more information was requested
  2192.  *  to be sent than can be sent to the device.  Some devices have
  2193.  *  restrictions on how much data can be sent to them.  (For example,
  2194.  *  there might be a limit on the number of buttons that can be
  2195.  *  pressed at once.)
  2196.  */
  2197. #define DIERR_REPORTFULL                0x8004020AL
  2198.  
  2199. #ifdef __cplusplus
  2200. };
  2201. #endif
  2202.  
  2203. #endif  /* __DINPUT_INCLUDED__ */
  2204.  
  2205. /****************************************************************************
  2206.  *
  2207.  *  Definitions for non-IDirectInput (VJoyD) features defined more recently
  2208.  *  than the current sdk files
  2209.  *
  2210.  ****************************************************************************/
  2211.  
  2212. #ifdef _INC_MMSYSTEM
  2213. #ifndef MMNOJOY
  2214.  
  2215. #ifndef __VJOYDX_INCLUDED__
  2216. #define __VJOYDX_INCLUDED__
  2217.  
  2218. #ifdef __cplusplus
  2219. extern "C" {
  2220. #endif
  2221.  
  2222. /*
  2223.  * Flag to indicate that the dwReserved2 field of the JOYINFOEX structure
  2224.  * contains mini-driver specific data to be passed by VJoyD to the mini-
  2225.  * driver instead of doing a poll.
  2226.  */
  2227. #define JOY_PASSDRIVERDATA          0x10000000l
  2228.  
  2229. /*
  2230.  * Informs the joystick driver that the configuration has been changed
  2231.  * and should be reloaded from the registery.
  2232.  * dwFlags is reserved and should be set to zero
  2233.  */
  2234. WINMMAPI MMRESULT WINAPI joyConfigChanged( DWORD dwFlags );
  2235.  
  2236.  
  2237. /*
  2238.  * Hardware Setting indicating that the device is a headtracker
  2239.  */
  2240. #define JOY_HWS_ISHEADTRACKER       0x02000000l
  2241.  
  2242. /*
  2243.  * Hardware Setting indicating that the VxD is used to replace
  2244.  * the standard analog polling
  2245.  */
  2246. #define JOY_HWS_ISGAMEPORTDRIVER    0x04000000l
  2247.  
  2248. /*
  2249.  * Hardware Setting indicating that the driver needs a standard
  2250.  * gameport in order to communicate with the device.
  2251.  */
  2252. #define JOY_HWS_ISANALOGPORTDRIVER  0x08000000l
  2253.  
  2254. /*
  2255.  * Hardware Setting indicating that VJoyD should not load this
  2256.  * driver, it will be loaded externally and will register with
  2257.  * VJoyD of it's own accord.
  2258.  */
  2259. #define JOY_HWS_AUTOLOAD            0x10000000l
  2260.  
  2261. /*
  2262.  * Hardware Setting indicating that the driver acquires any
  2263.  * resources needed without needing a devnode through VJoyD.
  2264.  */
  2265. #define JOY_HWS_NODEVNODE           0x20000000l
  2266.  
  2267.  
  2268. /*
  2269.  * Hardware Setting indicating that the device is a gameport bus
  2270.  */
  2271. #define JOY_HWS_ISGAMEPORTBUS       0x80000000l
  2272. #define JOY_HWS_GAMEPORTBUSBUSY     0x00000001l
  2273.  
  2274. /*
  2275.  * Usage Setting indicating that the settings are volatile and
  2276.  * should be removed if still present on a reboot.
  2277.  */
  2278. #define JOY_US_VOLATILE             0x00000008L
  2279.  
  2280. #ifdef __cplusplus
  2281. };
  2282. #endif
  2283.  
  2284. #endif  /* __VJOYDX_INCLUDED__ */
  2285.  
  2286. #endif  /* not MMNOJOY */
  2287. #endif  /* _INC_MMSYSTEM */
  2288.  
  2289. /****************************************************************************
  2290.  *
  2291.  *  Definitions for non-IDirectInput (VJoyD) features defined more recently
  2292.  *  than the current ddk files
  2293.  *
  2294.  ****************************************************************************/
  2295.  
  2296. #ifndef DIJ_RINGZERO
  2297.  
  2298. #ifdef _INC_MMDDK
  2299. #ifndef MMNOJOYDEV
  2300.  
  2301. #ifndef __VJOYDXD_INCLUDED__
  2302. #define __VJOYDXD_INCLUDED__
  2303. /*
  2304.  * Poll type in which the do_other field of the JOYOEMPOLLDATA
  2305.  * structure contains mini-driver specific data passed from an app.
  2306.  */
  2307. #define JOY_OEMPOLL_PASSDRIVERDATA  7
  2308.  
  2309. #endif  /* __VJOYDXD_INCLUDED__ */
  2310.  
  2311. #endif  /* not MMNOJOYDEV */
  2312. #endif  /* _INC_MMDDK */
  2313.  
  2314. #endif /* DIJ_RINGZERO */
  2315.